- 新建。
- new()即可进入新建状态;
- 就绪。
- 新建 -> 就绪,通过线程的start()方法;
- 运行。
- 就绪 -> 运行,等待CPU调度执行,当CPU调度处于就绪的线程时,线程才进入运行状态;运行 -> 就绪,通过线程的yield()方法;
- 阻塞。阻塞又分为普通阻塞、同步阻塞、等待阻塞。
- 运行 -> 普通阻塞,通过线程的sleep()或者join()方法;运行 -> 同步阻塞,通过synchronized关键字;运行 -> 等待阻塞,通过Object类的wait()方法。
- 普通阻塞 -> 就绪,通过sleep()结束、join()结束、I/O完成;同步阻塞 -> 就绪,通过获取到锁资源;等待阻塞 -> 就绪,通过notify()或者notifyAll()去唤醒等待线程,然后去争夺锁资源,拿到锁资源后,进入就绪状态;
- 死亡。
- 运行 -> 死亡,线程执行完或者因异常退出了run()方法,该线程结束生命周期。
注意:只有就绪状态和运行状态才会占用CPU时间片,其他都会让出CPU时间片。