线程的生命周期·
知识点详细说明
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()的情况)。
- 被其他线程唤醒(如
