Java并发技术总结之三——线程状态

接上篇《Java并发技术总结之二——ThreadLocal》

三. 线程状态

线程有六种状态:NEW, RUNNABLE(RUNNING), WAITING, TIME_WAITING, BLOCKED, TERMINATED

线程六种状态

3.1 NEW

线程刚刚被创建的时候,即 new Thread(),且尚未执行 start() 方法的状态;

3.2 RUNNABLE / RUNNING

RUNNABLE(或称 READY) 与 RUNNING 是线程已经准备执行正在执行的状态,是线程执行了 start() 方法之后状态。线程处于 RUNNABLE 或者是 RUNNING 状态,取决于 CPU 的调度,获取了 CPU 使用权的线程处于 RUNNING 状态,否则处于就绪状态 (RUNNABLE)。进入该状态的方法如下:

  • RUNNABLE -> RUNNING: CPU 调度后,获取 CPU 的使用权;
  • RUNNING -> RUNNABLE: 失去 CPU 的使用权,回到就绪状态;
  • NEW -> RUNNABLE: thread.start() 方法调用;
  • WAITING -> RUNNABLE: notify/notifyAll 方法调用;
  • TIME_WAITING -> RUNNABLE: notify/notifyAll 方法调用;

3.3 WAITING

WAITING 为等待状态,需要进行某些特定动作之后才能回到正常的运行状态,时间不确定
。进入该状态的方法如下:

  • RUNNABLE -> WAITING: wait/join 方法调用;

3.4 TIME_WAITING

TIME_WAITING 同样为等待状态,也需要进行某些特定动作才能回到正常运行状态。与 WAITING 方法不同的是 TIME_WAITING 状态的时间是确定的。进入该状态的方法如下:

  • RUNNABLE -> TIME_WAITING: sleep 方法调用;

3.5 BLOCKED

BLOCKED 状态是在获取锁过程中被阻塞的状态,通常用于 synchronized, lock 的使用场景中。进入该状态的方法如下:

  • RUNNABLE -> BLOCKED: synchronized, lock 阻塞;

3.6 TERMINATED

TERMINATED 状态标志着一个线程的结束,处于 TERMINATED 状态的线程不能再转变为其他状态。进入该状态的方法如下:

  • 线程正常的运行完毕;
  • 线程运行抛出异常;
  • JVM Crash,所有线程全部结束;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值