线程的生命周期·
知识点详细说明
Java线程的生命周期由Thread.State
枚举明确定义,包含以下6种状态:
1. 新建状态(NEW)
- 定义:线程对象被创建后,但未调用
start()
方法。 - 特点:
- 未分配系统资源(如CPU时间片)。
- 可通过
Thread.getState()
获取状态为NEW
。
- 示例:
Thread t = new Thread(); // 状态为NEW
2. 就绪状态(RUNNABLE)
- 定义:调用
start()
后,线程等待CPU调度。 - 特点:
- 线程进入可运行线程池,随时可能被操作系统选中执行。
- 包含两种子状态:
- Ready:等待CPU分配时间片。
- Running:正在执行
run()
方法(操作系统实际分配时间片)。
- 触发条件:
start()
方法被调用。- 线程从阻塞/等待状态恢复(如
sleep()
结束、notify()
唤醒)。
3. 阻塞状态(BLOCKED)
- 定义:线程因竞争同步锁失败而暂停。
- 触发条件:
- 尝试进入
synchronized
代码块/方法,但锁已被其他线程占用。
- 尝试进入
- 恢复条件:
- 获得锁后进入
RUNNABLE
状态。
- 获得锁后进入
4. 等待状态(WAITING)
- 定义:线程主动放弃CPU,进入无限期等待。
- 触发条件:
- 调用
Object.wait()
(需配合synchronized
)。 - 调用
Thread.join()
(不带超时参数)。 - 调用
LockSupport.park()
。
- 调用
- 恢复条件:
- 被其他线程唤醒(如
notify()
/notifyAll()
)。 - 目标线程终止(针对
join()
的情况)。
- 被其他线程唤醒(如