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