Java线程基础 - (二)线程的状态详解(对比三种、五种和六种状态)

使用版本为Java8

Java的6种线程状态

Java线程状态定义于java.lang.Thread.State,共6种状态:

状态定义状态名解释
NEW初始构造一个线程实例后、启动前,线程处于该状态(任何方式创建都是如此,点击可查看线程创建方法
RUNNABLE就绪/运行该状态包含了经典线程模型的两种状态:就绪(Ready)、运行(Running):
-------------------
就绪状态表示有资格运行,但如果一直没拿到时间片,就一直是就绪状态
* 初始状态的线程,start()方法被调用后,就进入RUNNABLE状态,表示就绪(Ready);并开始等待CPU时间片;
* 等待或阻塞状态结束,如sleep()结束、或其他线程join()结束、拿到锁,也会进入就绪状态
* 线程时间片用完,线程的yield()方法会被调用,线程随即进入就绪状态
-------------------
当线程调度选中该线程、并分配了CPU时间片后,该线程尽管处于Runnable状态,但实际上是运行(Running);
* 这是线程进入运行状态的唯一方式
BLOCKED阻塞通常与锁有关系,表示线程正在获取有锁控制的资源,比如进入synchronized代码块,获取ReentryLock等
WAITING等待进入该状态的线程,等待被显式唤醒(其他线程发出通知或中断,如notify/notifyAll, 或者另外的线程终止如join的情况),否则处于无限期等待
TIMED_WAITING超时等待该状态不同于WAITING,它可以在指定的时间后自动唤醒;
* 处于这种状态的线程不会被分配CPU执行时间;
* Thread.sleep()执行后,线程就会进入该状态
TERMINATED终止表示该线程已经执行完毕;
* 线程Run方法体结束、或主线程(守护线程)的main()方法完成时,线程就认为终止了;
* 线程对象可能还存活,但不再是单独执行的线程
* 终止的线程不允许再调用Thread.start()方法

传统线程模型的3种或5种状态

三种状态:就绪、运行、等待
五种状态:新建、就绪、运行、等待、退出

上面已经把RUNNABLE拆解成就绪和运行状态,另外Java的BLOCKEDWAITINGTIMED_WAITING都属于传统模型的等待状态。

以上。感谢您的阅读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值