6.3Java线程状态

6.3Java线程状态

线程五大状态

  • 新生状态--->代码层面写好了该线程

  • 就绪状态--->告诉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

    •  

 

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/14847141.html