Java线程的生命周期

后端 潘老师 6个月前 (11-06) 134 ℃ (0) 扫码查看

Java线程的生命周期是什么

在 java 中,任何对象都有生命周期,同样,线程也不例外,它也有自己的生命周期。线程的生命周期指的是线程对象的生老病死,即线程的状态。

Java线程的生命周期的五种状态

线程的整个生命周期可以分为 5 个阶段(状态),分别是:

  • 新建状态(New)
  • 就绪状态(Runnable)
  • 运行状态(Running)
  • 阻塞状态(Blocked)
  • 死亡状态(Terminated)

但在JDK1.5 之后,变成了6种状态:

  • 将准备和运行合并为一个Runnable状态
  • 将阻塞细分为:计时等待、锁阻塞、无线等待3种状态

线程生命周期可以通过getState()方法获得,线程的状态是Thread.State枚举类型定义的,由以下几种组成:

  • NEW :新建状态。创建了线程对象,在调用start()启动之前的状态
  • RUNNABLE:可运行状态,它包括READY和RUNNING两个状态。READY状态表示线程可以被线程调度器进行调度,来使它变成RUNNING状态。RUNNING状态表示该线程正在被执行。Thread.yield()方法可以把线程由RUNNING状态转换为READY状态。
  • BLOCKED :阻塞状态。线程发起阻塞的IO操作,或者申请由其他线程占用的独占资源,线程会转化为BLOCKED阻塞状态。处于阻塞状态的线程不会占用CPU资源。当阻塞IO操作执行完,或者线程获得了其申请的资源,线程可以转换为RUNNABLE
  • WAITING:等待状态。线程执行了object.wait()或者thread.join()方法,会把线程转换为WAITING等待状态。执行object.notify()方法,或者加入的线程执行完毕,当前线程会转换为RUNNABLE状态。
  • TIMED_WAITING :与WAITING状态类似,都是等待状态。区别在于,处于该状态的线程不会无限期地等待。如果线程没有在指定的时间范围内完成期望操作,该线程自动转换为RUNNABLE状态。
  • TERMINATED:终止状态。线程结束处于终止状态。

Java线程的生命周期的状态转换

线程的不同状态表明了线程当前正在进行的活动。在程序中,通过一些操作可以使线程在不同状态之间转换:java线程的状态转换图
上图中展示了线程各种状态的转换关系,箭头表示可转换的方向,其中,单箭头表示状态只能单向的转换,例如,线程只能从新建状态转换到就绪状态,反之则不能。双箭头表示两种状态可以互相转换,例如,就绪状态和运行状态可以互相转换。通过一张图还不能完全描述清楚线程各状态之间的区别,接下来针对线程生命周期中的五种状态分别进行详细讲解,具体如下。

1. 新建状态(New)

创建一个线程对象后,该线程对象就处于新建状态,此时它不能运行,与其他 Java 对象一样,仅仅由 Java 虚拟机为其分配了内存,没有表现出任何线程的动态特征。

2. 就绪状态(Runnable)

当线程对象调用了 start()方法后,该线程就进入就绪状态。处于就绪状态的线程位于线程队列中,此时它只是具备了运行的条件,能否获得 CPU 的使用权并开始运行,还需要等待系统的调度。

3. 运行状态(Running)

如果处于就绪状态的线程获得了 CPU 的使用权,并开始执行 run()方法中的线程执行体,则该线程处于运行状态。一个线程启动后,它可能不会一直处于运行状态,当运行状态的线程使用完系统分配的时间后,系统就会剥夺该线程占用的 CPU 资源,让其他线程获得执行的机会。需要注意的是,只有处于就绪状态的线程才可能转换到运行状态。

4.阻塞状态(Blocked)

一个正在执行的线程在某些特殊情况下,如被人为挂起或执行耗时的输入/输出操作时,会让出 CPU 的使用权并暂时中止自己的执行,进人阻塞状态。线程进人阻塞状态后,就不能进入排队队列。只有当引起阻塞的原因被消除后,线程才可以转入就绪状态。

5.死亡状态(Terminated)

如果线程调用 stop()方法或 nun()方法正常执行完毕,或者线程抛出一个未捕获的异常(Exception)错误(Error),线程就进入死亡状态。一旦进入死亡状态,线程将不再拥有运行的资格,也不能再转换到其他状态。

补充

在JDK1.5 之后,线程生命周期转换图如下:JDK1.5 之后线程生命周期转换图

总结

以上就是Java线程的生命周期的全部内容。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/10640.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】