多线程的三种接口

三种创建方式

  1. Thread class 继承 Thread 类(重点)

  2. Runnable 接口 实现 Runnable 接口(重点)

  3. Callable 接口 实现 Callable 接口(了解)

Thread

  • 自定义线程类继承 Thread 类

  • 重写 run() 方法,编写线程执行体

  • 创建线程对象,调用 start() 方法启动线程

package Thread;

//创建线程方式一:继承Thread类,重写run方法,调用start开启线程

//总结:注意,线程开启不一定立即执行,,由CPU调度执行
public class TestThread1 extends Thread{
   @Override
   public void run() {
       //run方法线程体
       for (int i = 0; i < 800; i++) {

           System.out.println("我在看代码---"+i);
      }

  }

   public static void main(String[] args) {
       //main线程,主线程

       //创建一个线程对象
       TestThread1 testThread1 = new TestThread1();
       //调用start开启线程
       testThread1.start();

       for (int i = 0; i < 2000; i++) {
           System.out.println("我在学习多线程---"+i);
      }
  }
}

Runnable

  • 定义MyRunnable类实现Runnable接口

  • 实现run()方法,编写线程执行体

  • 创建线程对象,调用start()方法启动线程

package Thread;


//创建线程方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
public class TestThread2 implements Runnable {
   public void run() {
       //run方法线程体
       for (int i = 0; i < 800; i++) {

           System.out.println("我在看代码---"+i);
      }

  }

   public static void main(String[] args) {

       //创建runnable接口的实现类对象
       TestThread2 testThread2 = new TestThread2();
       //创建一个线程对象,通过线程对象来开启我们的线程,代理
//       Thread thread = new Thread();
//       thread.start();
       new Thread(testThread2).start();

       for (int i = 0; i < 2000; i++) {
           System.out.println("我在学习多线程---"+i);
      }
  }
}

小结

  • 继承Thread类

    • 子类继承Thread类具备多线程能力

    • 启动线程:子类对象. start()

    • 不建议使用:避免OOP单继承局限性

  • 实现Runnable接口

    • 实现接口Runnable具有多线程能力

    • 启动线程:传入目标对象+Thread对象.start()

    • 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用

实现Callable接口(了解即可)

  • 实现Callable接口,需要返回值类型

  • 重写call方法,需要抛出异常

  • 创建目标对象

  • 创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);

  • 提交执行:Future<Boolean> result1 = ser.submit(t1);

  • 获取结果: boolean r1 = result1.get();

  • 关闭服务: ser.shutdownNow();

posted @ 2021-11-19 15:14  乏月十七  阅读(398)  评论(0)    收藏  举报