程的生命周期
Java 程在运行过程中经历不同的状态,状态之间有明确的转换规则。
程六种状态
| 状态 | 说明 | Thread.State |
|---|---|---|
| 新建 | 程创建未启动 | NEW |
| 可运行 | 就绪或运行中 | RUNNABLE |
| 阻塞 | 等锁释放 | BLOCKED |
| 无限等待 | 等待被唤醒 | WAITING |
| 计时等待 | 等待指定时间 | TIMED_WAITING |
| 终止 | 程执行完毕 | TERMINATED |
状态转换图
Java
NEW → start() → RUNNABLE
↓
获取锁失败 → BLOCKED → 获取锁 → RUNNABLE
↓
wait() → WAITING → notify() → RUNNABLE
↓
sleep(n) → TIMED_WAITING → 时间到期 → RUNNABLE
↓
run() 结束 → TERMINATED
各状态详解
NEW(新建)
Java
Thread thread = new Thread(() -> {});
System.out.println(thread.getState()); // NEW
程对象已创建,但未调用 start()。
RUNNABLE(可运行)
Java
thread.start();
System.out.println(thread.getState()); // RUNNABLE
程已启动,正在运行或等待 CPU 调度。就绪和运行合并为 RUNNABLE。
BLOCKED(阻塞)
Java
synchronized (lock) {
// 程等待获取 lock,状态为 BLOCKED
}
程等待获取 synchronized 锁。
WAITING(无限等待)
Java
// Object.wait()
synchronized (lock) {
lock.wait(); // 进入 WAITING,等待 notify()
}
// Thread.join()
thread.join(); // 当前线程 WAITING,等待 thread 结束
// LockSupport.park()
LockSupport.park(); // WAITING,等待 unpark()
程无限等待,需要其他线程唤醒。
TIMED_WAITING(计时等待)
Java
Thread.sleep(1000); // 休眠 1 秒
Object.wait(1000); // 等待最多 1 秒
thread.join(1000); // 等待最多 1 秒
LockSupport.parkNanos(1000); // 等待纳秒
程等待指定时间,时间到期自动恢复。
TERMINATED(终止)
Java
thread.start();
thread.join(); // 等待线程结束
System.out.println(thread.getState()); // TERMINATED
程 run() 方法执行完毕或因异常退出。
状态查看示例
text
public class StateDemo {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
});
System.out.println("创建后:" + thread.getState()); // NEW
thread.start();
System.out.println("启动后:" + thread.getState()); // RUNNABLE
try {
Thread.sleep(100); // 让线程先进入 sleep
System.out.println("运行中:" + thread.getState()); // TIMED_WAITING
thread.join();
System.out.println("结束后:" + thread.getState()); // TERMINATED
} catch (InterruptedException e) {}
}
}
BLOCKED vs WAITING
| 特性 | BLOCKED | WAITING |
|---|---|---|
| 原因 | 等锁释放 | wait()/join()/park() |
| 唤醒方式 | 获取锁 | notify()/线程结束/unpark() |
| 超时 | 不支持 | WAITING不支持,TIMED_WAITING支持 |
要点总结
- 六种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
- NEW:创建未启动
- RUNNABLE:就绪或运行中(合并状态)
- BLOCKED:等待 synchronized 锁
- WAITING:无限等待(wait、join、park)
- TIMED_WAITING:计时等待(sleep、wait(n)、join(n))
- TERMINATED:执行完毕
- getState() 查看线程状态
📝 发现内容有误?点击此处直接编辑