启动线程的正确方式及错误的方式
- 启动线程的正确方式通过调用线程的 start 方法
- 而错误的方式调用 run 方法
首先从源码的角度分析
start 启动方式
从下面的代码可以看出,start 启动步骤分为三部曲
- 判断线程的状态是否为初始化【通过这个也能解释为什么不能连续调用两次 start 方法】
- 将当前线程对象加入线程组
- 调用 start0 本地方法通过 JVM 启动一个新的线程,接着通过新线程执行子任务

run 启动方式
从下图可以看出,如果我们调用 run 方法执行任务,本质上是通过 Thread 对象运行 run 方法,即通过主线程执行 run 方法,和普通的对象执行某一个方法没有区别
