1、实现多线程的官方正确方法

  • 实现Runnable接口

  • 继承Thread类

**


两种方法优略对比:

实现Runnable接口更好

(1)从代码架构角度,具体的任务(Run方法)应该和”创建和运行线程的机制(Thread)类”解耦。Runable接口可以实现解耦。
(2)使用继承Thread的方式的话,每次想新建任务只能新建独立的线程,损耗较大(线程创建销毁等)。使用Runnable和线程池可以大大减小损耗。
(3)java为单继承,继承Thread类会剥夺其继承其他类的能力


两种方法的实质对比:

两种方法最主要的区别在于run()方法的内容来源,实现Runable接口最终调用target.run(),而继承Thread类则是整个run()方法被重写。

Thread run方法:

  1. @Override
  2. public void run() {
  3. if (target != null) {
  4. target.run();
  5. }
  6. }

精准描述:
准确的说,实现线程只有一种方式即构建Thread类,而实现线程的执行单元有两种方式:

  • 实现Runnable接口的run方法,并把Runnable实例传给Thread类
  • 重写Thread类的run方法(继承Thread类)

2、典型错误观点

类包装,实质相同:

  • 线程池创建线程

**

  • Callable创建线程

**

  • FutureTask创建线程

**

  • 定时器

**

语法层面不同:

**

  • 匿名内部类

  • lambda表达式