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

Java 线程的六种状态与完整生命周期详解

🚀 Java 线程的几种状态详解

在 Java 中,线程状态(Thread State)是由 Thread.State 枚举定义的,总共有六种

状态含义典型场景示例
NEW新建状态,线程对象刚创建,还未调用 start() 方法。Thread thread = new Thread();
RUNNABLE就绪状态,调用了 start() 后,等待 CPU 调度。thread.start();
BLOCKED阻塞状态,等待锁资源(例如 synchronized 锁定的对象)。线程 A 获得锁,线程 B 阻塞等待。
WAITING无限期等待,等待其他线程唤醒(需要显示调用 notify()join() 等方法)。Object.wait()thread.join()
TIMED_WAITING计时等待,到时间自动返回(比如 sleep、带超时的 wait)。Thread.sleep(1000)
TERMINATED终止状态,线程执行完毕或异常退出。线程执行完 run() 方法

在这里插入图片描述
也就是说,线程的生命周期可以分为五个主要阶段:新建、就绪、运行、阻塞和终止。线程在运行过程中会根据状态的变化在这些阶段之间切换。

class ThreadStateExample {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(() -> {try {Thread.sleep(2000); // TIMED_WAITINGsynchronized (ThreadStateExample.class) {ThreadStateExample.class.wait(); // WAITING}} catch (InterruptedException e) {Thread.currentThread().interrupt();}});System.out.println("State after creation: " + thread.getState()); // NEWthread.start();System.out.println("State after start: " + thread.getState()); // RUNNABLEThread.sleep(500);System.out.println("State while sleeping: " + thread.getState()); // TIMED_WAITINGsynchronized (ThreadStateExample.class) {ThreadStateExample.class.notify(); // 唤醒线程}thread.join();System.out.println("State after termination: " + thread.getState()); // TERMINATED}
}

🔥 用一张 Mermaid 状态图帮你直观理解

调用 start()
等待锁
获取到锁
wait()/join()
sleep()/定时等待
被 notify()/join()结束
超时后返回
运行结束
中断或异常
中断或异常
NEW
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED

如何强制终止线程?

第一步,调用线程的 interrupt() 方法,请求终止线程。

第二步,在线程的 run() 方法中检查中断状态,如果线程被中断,就退出线程。

class MyTask implements Runnable {@Overridepublic void run() {while (!Thread.currentThread().isInterrupted()) {try {System.out.println("Running...");Thread.sleep(1000); // 模拟工作} catch (InterruptedException e) {// 捕获中断异常后,重置中断状态Thread.currentThread().interrupt();System.out.println("Thread interrupted, exiting...");break;}}}
}public class Main {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(new MyTask());thread.start();Thread.sleep(3000); // 主线程等待3秒thread.interrupt(); // 请求终止线程}
}

中断结果:

在这里插入图片描述


🧠 小知识点:

  • NEW → RUNNABLE:线程调用了 start() 方法,但真正运行由 CPU 调度。
  • RUNNABLE → BLOCKED:常见于 synchronized 竞争失败。
  • WAITING vs TIMED_WAITING
    • WAITING 是无限期等待(比如 wait()join() 不带超时)。
    • TIMED_WAITING 是有时间限制的等待(比如 sleep(1000),或者 join(5000))。
  • 线程死亡(TERMINATED) 后无法再次 start(),否则抛出 IllegalThreadStateException
http://www.xdnf.cn/news/2261.html

相关文章:

  • YOLOv8改进新路径:Damo-YOLO与Dyhead融合的创新检测策略
  • C语言学习之调试
  • 小白自学python第三天
  • 当高级辅助驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?
  • Python类和对象四(十三)
  • 2025雅思口语工具Top10:AI软件真实测评
  • 在springboot项目中,如何进行excel表格的导入导出功能?
  • JavaScript基础-算数运算符
  • (四) 实战Trae 编译调试C++项目(以minidocx为例)
  • Winform(2.多线程)
  • C19-while循环及for循环等价引入
  • CANFD技术在实时运动控制系统中的应用:协议解析、性能测试与未来发展趋势
  • (23)VTK C++开发示例 --- 读取所有的PolyData类型示例
  • 网络管理知识点
  • Java----内部类 以及 调用关系
  • Pygame终极项目:从零开发一个完整2D游戏
  • C++之map
  • ngrok 内网穿透技术系统性文档
  • 初始网络流(最小割)
  • 【C语言练习】005. 编写表达式并确定其值
  • leetcode刷题日记——环形链表
  • 新增Webhook通知功能,文档目录树展示性能优化,zyplayer-doc 2.5.1 发布啦!
  • Linux基础篇、第4章_03系统磁盘高级管理LVM 逻辑卷管理器
  • 【头脑风暴】加权平均
  • 模型 递弱代偿
  • [计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)
  • 视觉大模型专栏导航
  • C++泛型编程(一):模板详解
  • 可视化大屏开发前提了解
  • ssm驾校预约管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!