通常说两种

其他说法

本质只有一种创建线程的方法

构造thread类是唯一创建线程的方法
实现Runnable接口”和“继承Thread类重写Run方法”只是不同的实现线程所执行的任务的方法

实现Runnable接口比直接继承Thread类要好

  1. 从代码结构上考虑:实现Runnable更解耦,Runnable实现里是要执行的任务,Thread类负责线程启动和属性设置等内容
  2. 某些情况可以提高性能,继承Thread每次都需要完整的线程生命周期来执行一次任务。实现Runnable接口就可以通过传入任务的方式实现线程的复用,这也是线程池的实现原理
  3. Java不支持双继承,实现Runnable接口不影响继承