Windows与Linux操作系统线程状态完整标准列表及现代分类解析
现代线程状态的标准分类与核心状态解析
不同资料里的线程状态分类差异,主要是因为观察视角不同——有的从操作系统内核调度层做了简化,有的是早期多线程框架的细分扩展,但目前行业内认可度最高的现代分类,是主流编程语言(Java、Python、C#等)遵循的标准化核心状态体系,以Java的Thread.State为典型代表,包含6种核心状态:
- NEW(新建状态):线程对象已经创建,但还没调用
start()方法。此时线程还没被操作系统调度器纳入管理,不会执行任何代码逻辑。 - RUNNABLE(可运行状态):调用
start()后进入该状态,它包含两种实际场景:要么线程正在CPU上执行(对应你提到的executing),要么在就绪队列里等着CPU分配时间片。操作系统层面不区分这两种子场景,统一视为可被调度的状态。 - BLOCKED(阻塞状态):线程因为等待锁资源(比如Java里的
synchronized锁)而暂停执行。一旦拿到锁,会立刻回到RUNNABLE状态。 - WAITING(无限等待状态):线程主动触发无时限等待,比如调用
Object.wait()、无参的Thread.join()或者LockSupport.park()。这种状态下,线程必须靠其他线程主动唤醒(比如Object.notify())才能回到RUNNABLE状态。 - TIMED_WAITING(计时等待状态):线程进入有时限的等待,比如调用
Thread.sleep(long)、带超时参数的Object.wait(long)或Thread.join(long)。等待时间到了之后,线程会自动唤醒,回到RUNNABLE状态。 - TERMINATED(终止状态):线程的
run()方法执行完毕,或者因为未捕获的异常导致终止。此时线程彻底失去执行能力,再也无法切换到其他状态。
另外你提到的suspended这类状态,属于早期多线程框架的扩展状态,现代主流标准里已经不再将其列为核心状态——因为手动暂停/恢复线程的操作很容易引发死锁、资源不一致等问题,被大部分现代编程语言弃用。
内容的提问来源于stack exchange,提问作者Hovanella
相关产品推荐
相关产品推荐

