了解下线程
1. 操作系统层面的线程状态(5种)
这是通用操作系统(如Linux、Windows)中线程的生命周期状态:
- 新建(New):线程被创建但尚未启动。
- 就绪(Ready):线程已启动,等待CPU分配时间片。
- 运行(Running):线程获得CPU时间片,正在执行代码。
- 阻塞(Blocked):线程因等待I/O操作、锁释放等资源而暂停执行,释放CPU资源。
- 终止(Terminated):线程执行完毕或异常退出,释放所有资源
2. Java语言层面的线程状态(6种)
Java在java.lang.Thread.State枚举中明确定义了6种状态,与操作系统状态存在映射关系:
| Java状态 | 操作系统对应状态 | 触发条件 |
|---|---|---|
| NEW | 新建 | 线程被创建(new Thread()),但未调用start() |
| RUNNABLE | 就绪/运行 | 调用start()后,线程可能正在运行或等待CPU调度 |
| BLOCKED | 阻塞 | 等待获取synchronized锁(其他线程持有锁时) |
| WAITING | 阻塞 | 无限期等待唤醒(如Object.wait()、Thread.join()) |
| TIMED_WAITING | 阻塞 | 有限期等待(如Thread.sleep(n)、Object.wait(timeout)) |
| TERMINATED | 终止 | 线程执行完毕(run()结束)或抛出未捕获异常 |
3. 关键差异说明
- RUNNABLE状态的合并:
Java将操作系统的就绪(Ready) 和 运行(Running) 合并为RUNNABLE状态,因为JVM不区分线程是否正在占用CPU - 细化等待状态:
Java将操作系统的阻塞(Blocked) 细分为BLOCKED、WAITING、TIMED_WAITING,以更精确描述线程暂停的原因 - 阻塞与等待的区别:
BLOCKED:竞争锁失败(被动等待)WAITING/TIMED_WAITING:主动调用方法释放CPU(如wait()或sleep())

浙公网安备 33010602011771号