线程状态

本文介绍了Java线程和对应的操作系统线程的具体状态的含义,对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

未知状态。