行业资讯 2025年08月6日
0 收藏 0 点赞 311 浏览 1864 个字
摘要 :

文章目录 Java线程的生命周期是什么 Java线程的生命周期的五种状态 Java线程的生命周期的状态转换 1. 新建状态(New) 2. 就绪状态(Runnable) 3. 运行状态(Running) 4.阻……




  • Java线程生命周期是什么
  • Java线程的生命周期的五种状态
  • Java线程的生命周期的状态转换
    • 1. 新建状态(New)
    • 2. 就绪状态(Runnable)
    • 3. 运行状态(Running)
    • 4.阻塞状态(Blocked)
    • 5.死亡状态(Terminated)
  • 补充
  • 总结

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 之后,线程生命周期转换图如下:Java线程的生命周期

总结

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

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9676.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号