概述
上一篇博客我整理了 Java 線程常用的方法,其中提到 getState() 方法可以獲取線程的狀態。本篇博客主要通過流程圖的方式整理線程狀態的轉換方式:
線程狀態切換圖
本篇博客主要從以下兩個模塊展開:
- Java 線程狀態
- 狀態轉換圖
1、Java 線程狀態
Java Thread 源碼中,線程狀態通過枚舉類 State 表示,其中線程狀態主要有以下六種:
-
NEW:剛剛創建,還沒有啓動的線程。即 new 出來的 Thread 對象
-
RUNNABLE:正在運行的線程,即使CPU沒有調度,也視爲 RUNNABLE 狀態。
-
BLOCKED:線程競爭鎖失敗,阻塞等待鎖時的狀態
-
WAITING:沒有最大等待時長的阻塞狀態,等待其他線程喚醒
-
TIMED_WAITING:有最大等待時長的阻塞狀態
-
TERMINATED:已經死亡(執行完畢)的線程
2、狀態轉換圖
爲了區分正在運行還是就緒等待CPU調度,我們新加了一個Ready狀態,表示等待CPU調度的線程。
該流程圖只是一個大概過程,無法展現方法的細節,如: sleep() 不會放棄鎖,wait() 會放棄鎖等特性。如果想了解每個方法的具體細節,可以點擊這裏參考我之前的博客。