1. 程式人生 > 實用技巧 >Java基礎學習05--執行緒基本狀態與常用方法

Java基礎學習05--執行緒基本狀態與常用方法

1.Java執行緒的狀態

Java的執行緒有6種狀態,它們定義在java.lang.Thread.State類中。

(1)NEW狀態

是指執行緒剛建立, 尚未啟動

(2)RUNNABLE狀態

是執行緒正在正常執行中, 當然可能會有某種耗時計算/IO等待的操作/CPU時間片切換等, 這個狀態下發生的等待一般是其他系統資源, 而不是鎖, Sleep等

(3)BLOCKED狀態

這個狀態下, 是在多個執行緒有同步操作的場景, 比如正在等待另一個執行緒的synchronized 塊的執行釋放, 或者可重入的 synchronized塊裡別人呼叫wait() 方法, 也就是這裡是執行緒在等待進入臨界區


(4)WAITING狀態

這個狀態下是指執行緒擁有了某個鎖之後, 呼叫了他的wait方法, 等待其他執行緒/鎖擁有者呼叫 notify / notifyAll 一遍該執行緒可以繼續下一步操作, 這裡要區分 BLOCKED 和 WATING 的區別, 一個是在臨界點外面等待進入, 一個是在理解點裡面wait等待別人notify, 執行緒呼叫了join方法 join了另外的執行緒的時候, 也會進入WAITING狀態, 等待被他join的執行緒執行結束

(5)TIMED_WAITING狀態

這個狀態就是有限的(時間限制)的WAITING, 一般出現在呼叫wait(long), join(long)等情況下, 另外一個執行緒sleep後, 也會進入TIMED_WAITING狀態

(6)TERMINATED

這個狀態下表示 該執行緒的run方法已經執行完畢了, 基本上就等於死亡了(當時如果執行緒被持久持有, 可能不會被回收)

這幾種狀態的轉換關係如下圖:

2.Java執行緒的常用方法

// 休眠
public static void sleep();

// 放棄,讓出執行緒,讓CPU重新排程(有可能再被CPU選中)
public static void yield();

// 加入,阻塞當前執行緒搶佔資源
執行緒例項.join();

// 設定執行緒優先順序,優先順序1-10,預設5
執行緒例項.setPriority();

// 守護執行緒,守護執行緒就是後臺執行緒
執行緒例項.setDaemon(true
);