JAVA 執行緒的6種狀態
阿新 • • 發佈:2022-05-29
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