1.多线程实现的两种方式

1.1 extends Thread(继承的方式)

  1. public class MyThread extends Thread {
  2. public void run() {
  3. /* 为了方便测试 */
  4. // try {
  5. // Thread.sleep(1000);
  6. // } catch (InterruptedException e) {
  7. // e.printStackTrace();
  8. // }
  9. System.out.println(Thread.currentThread().getName() + "正在执行。。。");
  10. System.out.println("发送注册成功的邮件");
  11. }
  12. }

1.2 implements Runnable(实现接口的方式)

  1. public class MyThread implements Runnable {
  2. @Override
  3. public void run() {
  4. /* 为了方便测试 */
  5. // try {
  6. // Thread.sleep(1000);
  7. // } catch (InterruptedException e) {
  8. // e.printStackTrace();
  9. // }
  10. System.out.println(Thread.currentThread().getName() + "正在执行。。。");
  11. }
  12. }

2.线程池的应用

案例需求:对于注册成功的用户,要给其发一份注册成功的邮件。(如果传统代码的同步执行会浪费很长时间。所以采用多线程的方法)

  1. public class ThreadPools {
  2. public static void main(String[] args) throws Exception {
  3. System.out.println("注册成功!");
  4. //创建一个可重用固定线程数的线程池
  5. ExecutorService pool = Executors.newCachedThreadPool();
  6. //创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口
  7. Thread t1 = new MyThread();
  8. //将线程放入池中进行执行
  9. pool.execute(t1);
  10. //关闭线程池
  11. pool.shutdown();
  12. System.out.println("返回前端页面");
  13. }
  14. }

其中MyThread这个类采用了1.1的方式。效果如下:
image.png