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

Java 线程状态详解:从创建到销毁的完整旅途

前言

在 Java 多线程编程中,线程的状态管理是理解并发逻辑的核心。本文将用通俗的语言和代码示例,解析线程的6种状态及其转换条件,助你彻底掌握线程的生命周期。


一、线程的6种状态

状态含义
NEW线程对象已创建,但未启动(未调用start())。
RUNNABLE线程正在运行或就绪(等待 CPU 时间片),对应操作系统的“就绪态”和“运行态”。
BLOCKED线程因竞争锁(如 synchronized)被阻塞,直到获得锁。
WAITING无限期等待其他线程唤醒(如 wait()、无参 join())。
TIMED_WAITING有限期等待(如 sleep(ms)、带超时的 join(ms)
TERMINATED线程已执行完毕,内核线程销毁,对象仍存在。

二、状态转换条件与场景

1. NEW → RUNNABLE

  • 触发条件:调用 start() 方法。
  • 代码示例
Thread t = new Thread(() -> {});  // NEW
t.start();                        // → RUNNABLE

2. RUNNABLE ↔ BLOCKED

触发条件:

  • → BLOCKED:竞争 synchronized 锁失败。
  • → RUNNABLE:成功获取锁。

示例场景:多线程访问同一同步代码块。

3. RUNNABLE ↔ WAITING

触发条件:

  • → WAITING:调用 wait()join()
  • → RUNNABLE:其他线程调用 notify()/notifyAll() 或目标线程结束。
  • 代码示例:
synchronized (lock) {lock.wait();    // RUNNABLE → WAITING
}

4. RUNNABLE → TIMED_WAITING

触发条件:

  • → TIMED_WAITING:调用 sleep(ms)join(ms)wait(ms)
  • → RUNNABLE:超时结束或被 interrupt() 中断。

代码示例:

Thread.sleep(1000);  // RUNNABLE → TIMED_WAITING

5. RUNNABLE → TERMINATED

触发条件:run() 方法执行完毕或抛出未捕获异常。


三、状态转换图

状态转换图

四、常见误区与注意事项

  1. RUNNABLE 包含“运行中”和“就绪”
    Java 不区分正在运行和等待CPU调度的线程,统一标记为 RUNNABLE。
  2. BLOCKED vs WAITING:
    • BLOCKED:因锁竞争被阻塞(被动)。
    • WAITING/TIMED_WAITING:主动调用等待方法(如 wait())。
  3. sleep() 不释放锁
    线程休眠时仍持有锁(与 wait() 不同,后者会释放锁)。

五、总结

  • NEW 和 TERMINATED:线程的起点与终点。
  • RUNNABLE:线程的活跃状态,可能正在运行或就绪。
  • BLOCKED:锁竞争下的无奈等待。
  • WAITING/TIMED_WAITING:主动让出 CPU,等待唤醒或超时。
    理解线程转换,是诊断死锁、性能优化和设计高并发程序的基础。下次遇到线程“卡死”,不妨先看看它处于哪种状态!

相关文章:

  • 单片机-STM32部分:18、WiFi模组
  • CSS实现文本自动平衡text-wrap: balance
  • 弦理论的额外维度指的是什么,宇宙中有何依据
  • 账号风控突破:云手机设备指纹篡改检测与反制技术解析
  • deepseek问答记录:请讲解一下hugingface transformers中的AutoProcessor
  • crontab 定时任务不执行问题排查
  • AlphaEvolve:基于Gemini的算法发现与优化综合报告
  • 本地部署开源网盘系统 kiftd 并实现外部访问(Windows 版本)
  • 5月16日day27打卡
  • 自定义快捷键软件:AutoHotkey 高效的快捷键执行脚本软件
  • 无缝部署您的应用程序:将 Jenkins Pipelines 与 ArgoCD 集成
  • Qwen3技术报告解读
  • CMU-15445(4)——PROJECT#1-BufferPoolManager-Task#2
  • RKNN开发环境搭建(ubuntu22.04)
  • 如何使用 Solana Yellowstone gRPC 重新连接和重放插槽
  • A12 乐队指挥更懂管理
  • Vue3:脚手架
  • MongoDB 应用实战
  • CentOS高手之路:从进阶实战到企业级优化
  • eSwitch manager 简介
  • 从近200件文物文献里,回望光华大学建校百年
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 嫩黑线货物列车脱轨致1名路外人员死亡,3人被采取刑事强制措施
  • 查幽门螺杆菌的这款同位素长期被海外垄断,秦山核电站实现突破
  • 云南德宏州盈江县发生4.5级地震,震源深度10千米
  • 李公明︱一周书记:当前科学观中的盲点、危机与……人类命运