# 21. Java 线程的生命周期分析
# 标准答案
✅ Java 线程的生命周期包括新建(NEW)、就绪(RUNNABLE)、运行(RUNNING)、阻塞(BLOCKED)、等待(WAITING)、计时等待(TIMED_WAITING)和终止(TERMINATED)状态。线程通过调用不同的方法在这些状态之间切换。
# 答案解析
# 1️⃣ 线程的生命周期状态
- 新建(NEW):线程被创建但未启动。
- 就绪(RUNNABLE):线程准备运行,等待CPU调度。
- 运行(RUNNING):线程正在执行。
- 阻塞(BLOCKED):线程等待获取锁。
- 等待(WAITING):线程等待另一个线程执行特定操作。
- 计时等待(TIMED_WAITING):线程在指定时间内等待。
- 终止(TERMINATED):线程已完成执行。
# 2️⃣ 状态切换
- start():从新建到就绪。
- wait():从运行到等待。
- notify()/notifyAll():从等待到就绪。
- sleep()/join():从运行到计时等待。
- synchronized:从就绪到阻塞。
# 常见误区
- ❌ 误区1:认为线程在RUNNABLE状态一定在运行。实际上,RUNNABLE状态表示线程可以运行,但不一定正在运行。
- ❌ 误区2:忽视WAITING和TIMED_WAITING的区别。WAITING是无限期等待,TIMED_WAITING是有时间限制的等待。
状态 | 描述 | 触发条件 |
---|---|---|
NEW | 线程被创建 | new Thread() |
RUNNABLE | 线程准备运行 | start() |
RUNNING | 线程正在执行 | CPU调度 |
BLOCKED | 等待获取锁 | synchronized |
WAITING | 等待另一个线程 | wait() |
TIMED_WAITING | 计时等待 | sleep()/join() |
TERMINATED | 线程已完成 | run()方法结束 |
# 3️⃣ 典型场景与解决方案
# ✅ 适合使用线程状态管理的场景
- 多线程任务调度
- 使用线程状态管理实现任务调度。
# ❌ 不能用简单状态管理解决的场景
- 复杂的线程同步
- 需要复杂的线程同步和管理。
# 4️⃣ 底层原理解析
# 1. 线程状态的实现
- 线程状态由JVM管理,通过不同的方法调用实现状态切换。
# 2. 状态切换的实现
- 状态切换通过JVM的线程调度和锁机制实现。
# 企业真实场景问题分析
# Situation(业务背景)
在某高并发系统中,需要管理多个线程的状态。
# Task(核心任务 & 关键挑战)
- 如何管理多个线程的状态?
- 如何在保证安全的同时提高性能?
# Action(技术方案 & 逐步拆解)
- 方案1:使用线程状态管理
- 管理多个线程的状态。
- 方案2:使用线程调度
- 提高系统的性能。
# Result(结果分析)
- 使用线程状态管理可以提高系统的安全性。
- 使用线程调度可以提高系统的性能。
# 深入追问
🔹 如何管理多个线程的状态?
- 通过线程状态管理和调度实现。
🔹 线程状态与线程调度的关系是什么?
- 线程状态由线程调度决定,线程调度根据状态进行切换。
# 相关面试题
- 如何管理多个线程的状态?
- 线程状态与线程调度的关系是什么?
- 线程的生命周期有哪些状态?