线程生命周期中,线程状态切换关系如下图:
线程各个状态直接切换说明:
-
new Thread至Runnable状态
调用thread的start方法进入Runnable状态,但是现在线程并没有运行,相当于一个thread对象放到了内存中,等待调度运行 -
RUNNABLE至RUNNING状态
当前Runnable状态的Thread被调度器选择,进入Running状态 -
RUNNING至RUNNABLE状态
当前Running状态的线程,yield(让出CPU)或者调度器轮询使该线程放弃执行,当前的线程会从RUNNING至RUNNABLE -
RUNNING至BLOCKED状态
线程遇见阻塞操作,如:IO操作、等待锁资源等,调用sleep或者wait方法,进入Blocked状态 -
BLOCKED至RUNNABLE状态
wait的线程被notify或者notifyall,阻塞操作完成,阻塞被interrupt,sleep的时间到达,Blocked状态进入到Runnable状态
进入TERMINATED状态
线程运行完成,结束生命周期。线程运行异常。JVM Crash(意外死亡)导致所有线程都结束
PS:学习笔记整理,有错误欢迎指正。