当前位置: 首页 > news >正文

线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式?

在 Java 中,线程的生命周期管理通过不同的状态来跟踪。一个线程在其生命周期中可以处于多种状态,不同的状态之间会通过特定的事件发生转变。以下是 Java 线程的几种状态及其之间的转移方式:

1. 线程的状态

1.1 NEW(新建状态)
  • 定义:线程刚被创建,但尚未启动。
  • 状态表示:当通过 new Thread() 创建一个线程对象时,它处于 NEW 状态。
1.2 RUNNABLE(可运行状态)
  • 定义:线程已经调用了 start() 方法,处于可运行状态。此时,线程可能正在执行,也可能因为其他线程在运行而处于就绪状态(等待 CPU 时间片)。
  • 状态转换
    • NEW 转变为 RUNNABLE:通过调用 start() 方法启动线程。
1.3 BLOCKED(阻塞状态)
  • 定义:线程在等待获取一个锁对象(通常是同步方法或代码块的锁),并且因此无法继续执行。
  • 状态转换
    • RUNNABLE 转变为 BLOCKED:当线程尝试获取一个已经被其他线程持有的锁时。
1.4 WAITING(等待状态)
  • 定义:线程在等待另一个线程执行特定操作。进入此状态的线程不会消耗 CPU 资源。
  • 状态转换
    • RUNNABLE 转变为 WAITING
      • 调用 Object.wait()
      • 调用 Thread.join()
      • 调用 LockSupport.park()
1.5 TIMED_WAITING(限时等待状态)
  • 定义:线程在等待某个操作,在达到指定的时间后自动唤醒。
  • 状态转换
    • RUNNABLE 转变为 TIMED_WAITING
      • 调用 Thread.sleep(milliseconds)
      • 调用 Object.wait(milliseconds)
      • 调用 Thread.join(milliseconds)
      • 调用 LockSupport.parkNanos()LockSupport.parkUntil()
1.6 TERMINATED(终止状态)
  • 定义:线程已完成执行或异常退出。
  • 状态转换
    • RUNNABLEBLOCKEDWAITINGTIMED_WAITING 转变为 TERMINATED:当 run() 方法的执行结束,或者发生未捕获异常。

2. 状态转换总结

起始状态事件目标状态
NEW调用 start()RUNNABLE
RUNNABLE获得 CPU 的运行时间RUNNABLE
RUNNABLE线程调用 sleep()/wait()WAITING
RUNNABLE线程调用 join()WAITING
RUNNABLE获取不到锁BLOCKED
RUNNABLE调用 sleep(milliseconds)TIMED_WAITING
WAITING被其他线程调用 notify()/notifyAll()RUNNABLE
TIMED_WAITING超过时间RUNNABLE
TERMINATED线程完成执行TERMINATED

3. 线程状态的实现

通过 Java 的 Thread 类和实现 Runnable 接口的类,可以更好地理解线程状态的转换,对开发中的多线程应用程序实现和管理至关重要。

总结

Java 线程的几种状态以及它们之间的转换方式为程序员在进行多线程编程时提供了清晰的参考。理解这些状态有助于更好地设计和调试多线程应用程序。如果你有其它问题或需要更详细的解释,请随时在评论区留言探讨!

http://www.lryc.cn/news/460917.html

相关文章:

  • 自注意力机制self-attention中的KV 缓存
  • 前端库--nanoid(轻量级的uuid)
  • 计算机基础-什么是网络端口?
  • 力扣动态规划基础版(斐波那契类型)
  • Java重修笔记 InetAddress 类和 Socket 类
  • 秋招突击——8/6——万得数据面试总结
  • STM32定时器
  • 第七课 Vue中的v-for遍历指令
  • 【NTN 卫星通信】卫星通信的专利
  • vue3 element table 插槽外的数据更新,插槽内的数据未更新。
  • 飞凌嵌入式FET527N-C核心板已适配OpenHarmony4.1
  • CVPR 2024最佳论文候选-pixelSplat论文解读
  • 在Android中如何切割一张图片中的不规则“消息体/图片/表情包等等”?
  • Jenkins+Ant+Jmeter接口自动化集成测试
  • JavaSE——集合4:List接口实现类—LinkedList
  • FPGA图像处理之三行缓存
  • 10月15日,每日信息差
  • 4G、5G通信中,“网络侧“含义
  • spring boot核心理解-各种starter
  • 解决海外社媒风控问题的工具——云手机
  • 全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版
  • Maven入门
  • Chromium 中window.DOMParser接口说明c++
  • linux 安装gitlab
  • java基础(5)继承与多态
  • Flink消费Kafka实时写入Doris
  • 实现Web QQ音乐打开现有新标签页切换音乐
  • 从底层结构开始学习FPGA(15)----时钟结构(通俗版)
  • MacOS Sublime Text 解决中乱码
  • Python画笔案例-084 绘制 3D立方体