本文介紹了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 | 未知狀態。 |