新生状态--->代码层面写好了该线程
就绪状态--->告诉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