线程状态

更新时间:

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 未知状态