线程的生命周期状态

线程的声明周期状态图如下:
这里写图片描述

Java 线程的状态可以使用监控工具查看,也可以通过Thread.getState() 调用来获取。Thread.getState() 的返回值类型Thread.State 是一 个枚举类型( Enum)。

Thread.State所定义的线程状态包括以下几种:
NEW:一个已创建而未启动的线程处于该状态。由于一个线程实例只能够被启动一次,因此一个线程只可能有一次处于该状态。
RUNNABLE:该状态可以被看成一个复合状态。它包括两个子状态:READY和RUNNING。前者表示处于该状态的线程可以被线程调度器( Scheduler)进行调度 而使之处于 RUNNING状态。后者表示处于该状态的线程正在运行,即相应线程对象的run方法所对应的指令正在由处理器执行。执行 Thread. yield() 的线程,其状态可能会由RUNNING转换为READY。处于READY子状态的线程也被称为活跃线程。
BLOCKED:一个线程发起一个阻塞式I/O( Blocking I/ O)操作后,或者申请一个 由其他线程持有的独占资源( 比如 锁)时,相应的线程会处于该状态。处于 BLOCKED状态的线程并不会占用处理器资源。当阻塞式I/O操作完成后,或者线程 获得了其申请的资源,该线程的状态又可以转换为RUNNABLE。
WAITING:一个线程执行了某些特定方法之后就会处于这种等待其他线程执行另外 一些特定操作的状态。能够使其执行线程变更为WAITING状态的方法包括: Object.wait()、Thread. join() 和 LockSupport.park(Object)。能够使相应线程从 WAITING变更为RUNNABLE的相应方法包括:Object.notify()/notifyAll()和 LockSupport.unpark(Object))。
TIMED_WAITING: 该状态和WAITING 类似, 差别在于处于该状态的线程并非无限制地等待其他线程执行特定操作,而是处于带有时间限制的等待状态。当其他线程没有在指定时间内执行该线程所期望的特定操作时,该线程的状态自动转换为RUNNABLE。
TERMINATED:已经执行结束的线程处于该状态。由于一个线程实例只能够被启动 一次,因此一个线程也只可能有一次处于该状态。Thread.run()正常返回或者由于 抛出异常而提前终止都会导致相应线程处于该状态。一个线程在其整个生命周期 中,只可能有一次处于NEW状态和TERMINATED状态。

原文为《java多线程编程实战指南(核心篇)》电子工业出版社 黄文海著第一章第六节内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值