1、实现多线程的官方正确方法
- 实现Runnable接口
- 继承Thread类
**
两种方法优略对比:
实现Runnable接口更好
(1)从代码架构角度,具体的任务(Run方法)应该和”创建和运行线程的机制(Thread)类”解耦。Runable接口可以实现解耦。
(2)使用继承Thread的方式的话,每次想新建任务只能新建独立的线程,损耗较大(线程创建销毁等)。使用Runnable和线程池可以大大减小损耗。
(3)java为单继承,继承Thread类会剥夺其继承其他类的能力
两种方法的实质对比:
两种方法最主要的区别在于run()方法的内容来源,实现Runable接口最终调用target.run(),而继承Thread类则是整个run()方法被重写。
Thread run方法:
@Override
public void run() {
if (target != null) {
target.run();
}
}
精准描述:
准确的说,实现线程只有一种方式即构建Thread类,而实现线程的执行单元有两种方式:
- 实现Runnable接口的run方法,并把Runnable实例传给Thread类
- 重写Thread类的run方法(继承Thread类)
2、典型错误观点
类包装,实质相同:
- 线程池创建线程
**
- Callable创建线程
**
- FutureTask创建线程
**
- 定时器
语法层面不同:
**
匿名内部类
lambda表达式