1. 程式人生 > 其它 >JAVA 執行緒的6種狀態

JAVA 執行緒的6種狀態

JAVA執行緒的6種狀態

執行緒狀態(Thread.State)。執行緒處於下列狀態的其中之一。
一個執行緒在一個時刻只能有一個狀態。這些狀態是虛擬機器執行緒狀態,不能反應任何作業系統的執行緒狀態。
通過Thread.getState()方法可以獲得一個執行緒的狀態。

NEW

新建,一個執行緒還沒開始執行的狀態。
新建立的執行緒,還沒有開始執行,也就是還沒有呼叫strat()方法。

RUNNABLE

正在執行,一個執行緒在Java虛擬機器中正在執行的狀態。
正在執行的狀態不等於CPU正在執行這個執行緒的程式碼,也可能正在等待作業系統的資源,比如cpu資源。
當cpu空閒下來時,將會選擇一個處於 RUNNABLE 狀態的執行緒執行。

BLOCKED

阻塞,執行緒阻塞表示正在等待獲取監控鎖時的狀態。
此時執行緒正在等待獲取監控鎖,以進入一個同步程式碼塊或同步方法,或是在呼叫了Object.wait() 方法後重新進入一個同步程式碼塊或同步方法。

WAITING

等待,執行緒處於無限期的等待狀態,直到另一個執行緒執行特定的操作才能擺脫此狀態。
執行緒處於等待狀態,是由於執行緒呼叫了一下方法之一。

  • 不帶超時時間引數的 Object.wait()
  • 不帶超時時間引數的 Thread.join()
  • LockSupport.park()

執行緒處於等待狀態時,正在等待另一個執行緒執行特定操作。
例如:

  • 執行緒在一個物件上呼叫 Object.wait() 方法後,將會等待其他執行緒在同一個物件上呼叫 Object.notify() 或 Object.notifyAll() 方法。
  • 執行緒在呼叫了別的執行緒的 Thread.join() 方法後,將會等待指定執行緒結束。

TIMED_WAITING

限時等待,執行緒處於有限時間的等待狀態,直到另一個執行緒執行特定的操作或到時間,將會脫離此狀態。
執行緒處於限時等待狀態,是由於執行緒呼叫了一下方法之一,並且指定一個正數等待時間。

  • Thread.sleep()
  • 帶超時時間引數的 Object.wait()
  • 帶超時時間引數的 Thread.join()
  • LockSupport.parkNanos
  • LockSupport.parkUntil

TERMINATED

終止,已經退出了的執行緒在此狀態。
終止狀態,表示執行緒已經執行完畢了。

環境 JDK: openjdk-17+35