java线程生命周期由thread.state定义六种状态:new、runnable、blocked、waiting、timed_waiting、terminated;new经start()进入runnable,后者涵盖就绪与运行,blocked由锁竞争引发,waiting/timed_waiting由协作等待或超时触发,terminated为不可逆终点。

Java 线程的生命周期由 Thread.State 枚举明确定义,共六种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。它们不是线性流程,而是按具体操作和资源条件动态转换的。
NEW → RUNNABLE:启动才真正开始
仅用 new Thread() 创建对象时,线程处于 NEW 状态——它只是堆中的普通 Java 对象,尚未被 JVM 调度。必须显式调用 start() 方法,JVM 才会为其分配栈空间、注册调度信息,并转入 RUNNABLE 状态。
- 重复调用
start()会抛出IllegalThreadStateException - 直接调用
run()不触发任何状态变化,只是主线程里一次普通方法调用
RUNNABLE 是“可运行”而非“正在运行”
RUNNABLE 统一涵盖操作系统层面的“就绪”(等待 CPU)和“运行”(正在执行)两种情形。JVM 不区分二者,对外只暴露一个状态。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 线程在 RUNNABLE 下可能正占用 CPU,也可能在调度队列中排队
- 它不是阻塞态,但也不保证立刻执行;是否获得时间片由操作系统决定
从 RUNNABLE 进入等待或阻塞态的三种典型路径
线程在 RUNNABLE 状态下,因不同原因主动或被动让出 CPU,进入可恢复但暂不可执行的状态:
-
BLOCKED:尝试进入
synchronized代码块/方法,但锁被其他线程持有 -
WAITING:调用
Object.wait()、Thread.join()(无参)、LockSupport.park() -
TIMED_WAITING:调用
Thread.sleep(ms)、wait(ms)、join(ms)、LockSupport.parkNanos()
回到 RUNNABLE 或走向终结
等待与阻塞状态均可恢复,但触发机制不同:
- BLOCKED 在锁被释放后自动转为 RUNNABLE
- WAITING 需依赖
notify()/notifyAll()或线程中断 - TIMED_WAITING 在超时后自动转为 RUNNABLE,也可被中断提前唤醒
- RUNNABLE 状态下若
run()正常结束或抛出未捕获异常,则直接进入 TERMINATED
TERMINATED 是终点,不可逆。一旦到达,线程对象仍存在,但不能再参与调度或重新启动。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










