本文介绍了Java线程和对应的操作系统线程的具体状态的含义,对Java线程状态和操作系统线程状态进行了简单说明。
简介
每个Java线程都1:1对应操作系统的原生线程,所以线程状态又分为Java线程状态和操作系统线程状态。注意,由于JVM对OS线程也做了简单的抽象,所以它可以识别出一些JVM的特性(比如当前OS线程是因为Java代码执行object.wait()阻塞了,所以我们能看到操作系统线程有MONITOR_WAIT等状态)。
Java线程状态
状态 | 描述 |
NEW | 线程刚创建。 |
RUNNABLE | 线程正在运行。 |
SLEEPING | 线程处于睡眠状态( |
IN_OBJECT_WAIT | 线程正在等待同步器被唤醒( |
IN_OBJECT_WAIT_TIMED | 线程正在等待同步器被唤醒,并具有超时时间( |
PARKED | 线程正在等待( |
PARKED_TIMED | 线程正在等待,并具有超时时间( |
BLOCKED_ON_MONITOR_ENTER | 线程抢占同步器失败并阻塞( |
TERMINATED | 线程已终止。 |
UNKNOWN | 未知状态。 |
操作系统线程状态
状态 | 描述 |
ALLOCATED | 线程已分配,但未初始化。 |
INITIALIZED | 线程已初始化,但未运行。 |
RUNNABLE | 线程正在运行。 |
MONITOR_WAIT | 线程阻塞,正在等待下次抢锁。 |
COND_VAR_WAIT | 线程阻塞,正在等待条件变量唤醒( |
OBJECT_WAIT | 线程阻塞,正在等待对象唤醒( |
BREAK_POINTED | 线程停在JDB断点上。 |
SLEEPING | 线程处于睡眠状态( |
ZOMBIE | 线程已终止,但关联的资源还没有回收,线程处于僵尸状态。 |
UNKNOWN | 未知状态。 |