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