線程可以處于以下幾個狀態:
? · NEW:尚未啟動的線程處于此狀態;
? · RUNNABLE:在Java虛擬機中執行的線程處于此狀態;
? · BLOCKED:被阻塞等待監視器鎖定的線程處于此狀態;
? · WAITING:正在等待另一個線程執行特定動作的線程處于此狀態;
? · TIMED_WAITING:正在等待另一個線程執行動作達到指定等待時間的線程處于此狀態;
? · TERMINATED:已經退出的線程處于此狀態。
代碼演示:
//觀察測試線程狀態
public class TestState {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(()->{for (int i = 0; i < 5; i++) {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}System.out.println("/");});//觀察狀態Thread.State state = thread.getState();System.out.println(state); //NEW//觀察啟動后thread.start();state = thread.getState();System.out.println(state); //RUNNABLEwhile (state!= Thread.State.TERMINATED){ //只要線程不停止,就一直輸出狀態Thread.sleep(100);state = thread.getState(); //更新線程狀態System.out.println(state); //輸出狀態}}
}