Java多线程的生命周期

多线程的生命周期

1. 线程周期

  • NEW :新建状态。
  • RUNNABLE:在JAVA虚拟机中执行的线程处于这个阶段
  • BLOCKED:线程阻塞状态,被阻塞等待监视器锁定的线程处于这个状态。
  • WAITING:正在等待另一个线程执行特定的动作的线程处于这个状态(waiting状态也算blocked状态的一种)。
  • TIMED_WAITING:正在等待另一个线程执行动作达到指定等待时间的线程处于这个状态。
  • TERMINATED:已退出的线程处于此状态。

2. 线程状态的进一步说明

  • NEW : 在调用 strat() 之前的状态。

  • RUNNABLE:可运行状态,是个复合状态,可分为两类:

    1. :READY:就绪状态。
    2. RUNNING:表示该线程正在执行。
    3. 可通过上篇说到的 Thread.yield/join 方法,完成放弃CPU资源,使得该线程从 RUNNING状态转到 :READY。
    4. 然后如果在被程序调度器选中,又从 :READY状态转到 RUNNING状态。
  • BLOCKED:阻塞状态,当线程发起阻塞的 I/O 操作,或者申请其它线程独占的资源,线程会转换为 BLOCKED阻塞状态,处于阻塞状态的线程不占用 CPU 资源。当阻塞I/O操作完成时,或者线程获得了其他资源,线程可以转换为 RUNNABLE 状态。

    ① 等到需要的数据都准备完毕再回复 ———— 中间一直默不作声,这就是同步IO

    ② 先告诉应用程序数据没有准备好,然后准备好数据,通知(回调)应用程序或被轮询 ——这就是异步IO

    ① 一直等,直接数据都发过来,然后再进行下一步。———— 阻塞IO

    ② 先干别的,然后定期查询或等待回调。————— 非阻塞IO

  • WAITING:等待状态,线程执行了Object.wait(),Thread.join,会把线程转换为 WAITING状态。执行了Object.notify()方法,或者加入的线程执行完毕,会把线程从等待状态转为 RUNNABLE状态。

  • TIMED_WAITING:和WAITING 状态类似,区别在于状态的线程不会无限等待,如果在指定时间内完成了指定的操作,就会转换为 RUNNABLE状态。

  • TERMINATED(终止):线程结束处于的状态。

3. 图解

img

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值