2026-10-21 21:09:37
线程的五种状态分别为新生状态、就绪状态、运行状态、阻塞状态、死亡状态,其相互转换关系及核心逻辑如下:

新生状态
定义:线程对象被创建后,尚未启动运行时的状态。
转换条件:
调用start()方法后进入就绪状态。
若直接调用stop()方法(不推荐使用),则进入死亡状态。
就绪状态
定义:线程已具备运行条件(如获得除CPU外的所有资源),等待CPU时间片分配的状态。
转换条件:
获得CPU时间片后进入运行状态。
若调用stop()方法,则进入死亡状态。
运行状态
定义:线程正在执行任务的状态。
转换条件:
主动让出CPU:
调用yield()方法,主动放弃时间片,回到就绪状态。
时间片耗尽,被操作系统强制切换回就绪状态。
被动阻塞:
请求I/O操作、等待锁资源等,进入阻塞状态。
终止运行:
线程任务执行完毕,或调用stop()方法,进入死亡状态。
阻塞状态
定义:线程因等待某个条件(如I/O完成、锁释放)而暂停运行的状态。
转换条件:
等待的条件满足(如I/O完成、获得锁),被唤醒后进入就绪状态。
若调用stop()方法,则进入死亡状态。
死亡状态
定义:线程终止运行,无法再次启动的状态。
转换条件:
线程任务执行完毕。
调用stop()方法(已废弃,不推荐使用)。
发生未捕获的异常导致线程终止。
线程从就绪状态获得CPU时间片后进入运行状态。
若时间片耗尽或调用yield(),线程会回到就绪状态,等待下一次调度。
关键点:此循环由操作系统调度器控制,体现多线程的轮转执行特性。

运行→阻塞→就绪的转换
线程在运行状态中因等待资源(如I/O、锁)进入阻塞状态。
当资源就绪后,线程被唤醒并回到就绪状态,重新参与调度。
关键点:阻塞是线程主动释放CPU的行为,与时间片耗尽不同。
异常终止的转换路径
无论线程处于何种状态(除死亡状态外),调用stop()方法会强制终止线程并进入死亡状态。
注意:stop()方法已废弃,因其可能导致资源未释放或数据不一致,推荐使用标志位或interrupt()方法优雅终止线程。
线程启动与终止
新建线程→调用start()→就绪状态→运行状态→任务完成→死亡状态。
时间片轮转
运行状态→时间片耗尽→就绪状态→再次获得时间片→运行状态。
资源竞争与同步
运行状态→请求锁未获得→阻塞状态→锁释放→就绪状态→运行状态。
I/O操作
运行状态→发起I/O请求→阻塞状态→I/O完成→就绪状态→运行状态。

线程的五种状态转换体现了操作系统对线程的调度与管理逻辑。就绪、运行、阻塞是核心状态,其转换由资源分配、时间片调度和同步机制驱动;新生与死亡状态则标记线程的生命周期起点与终点。理解这些转换关系有助于优化多线程程序的性能与稳定性。