通常说两种
- 实现Runnable接口实现Runnable接口后得到一个实例,用这个实例构造Thread对象
- 继承Thread类继承Thread类,然后重写run方法
其他说法
- 线程池线程池通过线程工厂创建线程,里面还是通过new Thread(参数更多)来创建线程
- Callable接口可以提交到线程池中,本质只是线程任务,不是线程
- 定时器Timmer本质TimerThread是继承自Thread
- 匿名内部类和Lambda表达式只是实现Runnable接口的不同语法
本质只有一种创建线程的方法
构造thread类是唯一创建线程的方法
“实现Runnable接口”和“继承Thread类重写Run方法”只是不同的实现线程所执行的任务的方法
实现Runnable接口比直接继承Thread类要好
- 从代码结构上考虑:实现Runnable更解耦,Runnable实现里是要执行的任务,Thread类负责线程启动和属性设置等内容
- 某些情况可以提高性能,继承Thread每次都需要完整的线程生命周期来执行一次任务。实现Runnable接口就可以通过传入任务的方式实现线程的复用,这也是线程池的实现原理
- Java不支持双继承,实现Runnable接口不影响继承