线程五大状态
-
新生状态--->代码层面写好了该线程
-
就绪状态--->告诉cpu该线程可以调度了
-
运行状态--->cpu调度了该线程开始执行该线程了
-
阻塞状态--->cpu调度过程当中遇到的其他状态(丧失执行的权力)
-
同步阻塞--->synchronized--->锁可用--->就绪状态
-
等待阻塞--->wait()等到到同步--->notify()
-
IO流阻塞等--->sleep()/join()
-
-
死亡状态--->run方法结束
具体图示:
注意:
-
线程阻塞以后不是马上就能运行,而是回到就绪状态等待cpu调用
-
线程死亡之后不能重新开启,再次开启就是一个新的线程
线程状态详细图
新生状态:
-
Thread t = new Thread();
-
当新建了一个线程对象的时候就进入了新生状态
-
新生状态的线程有自己的内存空间--->工作空间
-
工作空间与主存交互--->从主内存拷贝数据到工作空间进行操作
-
就绪状态:
-
调用start()方法,线程进入就绪状态--->等待cpu的调度
-
进入就绪状态表示具备运行的能力和运行的条件--->进入就绪队列,等待系统为其分配cpu
-
一旦获得cpu才会真正执行run方法
进入就绪状态的方法:
-
start状态
-
解除阻塞状态再次进入就绪状态
-
调用yeild方法--->中断、让出cpu
-
jvm本身将cpu从本地线程切换到其他线程
运行状态:
特点:
-
从就绪状态被cpu调度到了进入运行状态
-
不会从阻塞状态回到运行状态
阻塞状态
四种情况:
-
sleep--->拿着资源等待多少秒(占用资源不允许其他线程使用)
-
wait--->允许别人在等待时候占用资源
-
join--->加入、合并、插队,等待别人服务完成才进行才做
-
IO操作--->read、write--->通过操作系统去调度也会进入阻塞
死亡状态
一般死亡原因:
-
代码执行完毕正常结束
-
线程被强制终止
-
stop
-
distroy
-
-