全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-10 7 分钟 ✍️ juanwangdev

程的生命周期

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

特性BLOCKEDWAITING
原因等锁释放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() 查看线程状态

📝 发现内容有误?点击此处直接编辑

← 上一篇 程的创建与启动
下一篇 → 程间通信
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库