多執行緒的學習 (二) 執行緒的狀態及其相互轉換

2021-09-23 22:54:20 字數 2424 閱讀 9263

我們通過查詢thread的原始碼可以看到state是乙個enum(列舉)裡面分別有6種狀態。

初始(new): 新建立了乙個執行緒物件,但還沒有呼叫start()方法。

執行(runnable): 處於可執行狀態的執行緒正在jvm中執行,但它可能正在等待來自作業系統的其他資源 ,例如處理器。

阻塞(blocked): 執行緒阻塞於synchronized鎖,等待獲取synchronized鎖的狀態。

等待(waiting): object.wait()、join()、 locksupport.park(),進入該狀態的執行緒需要等待其他執行緒做出一些特 定動作(通知或中斷)。

超時等待(time_waiting): object.wait(long)、thread.join()、locksupport.parknanos()、 locksupport.parkuntil,該狀態不同於waiting,它可以在指定的時間內自行返回。

終止(terminated): 表示該執行緒已經執行完畢 。

在這裡宣告一下,new 和terminated兩個狀態很明顯,就不進行演示,話不多說,直接上**。

runnable

/**

* @classname threadstatedemomo

* @description todo

* @author cabbagedevil

* @date 2019/5/29 23:57

* @version 1.0

**/public

class

threadstatedemo

catch

(ioexception e)})

.start();}}

這裡為了讓執行緒不結束使用了system.in.read(); 執行該程式後進入cmd使用jconsole(不會使用該命令列的同學注意文章結尾ps)進行檢視。

blockedtime_waiting

在這裡我們設定了第乙個執行緒開始並鎖定資源,等待999999,第二個執行緒則想要獲取資源,所以得到以下結果。

上面介紹了執行緒的每個狀態,那我們現在需要知道的是他們之間的轉換關係。上圖~

(不要問我為什麼粉粉的,因為我少女心)

ps:jconsole 和jps 相關

二 執行緒狀態

新建狀態 new 用new關鍵字建立乙個執行緒物件後,該執行緒物件就處於新生狀態。處於新生狀態的執行緒有自己的記憶體空間,通過呼叫start方法進入就緒狀態。就緒狀態 runnable 處於就緒狀態的執行緒已經具備了執行條件,但是還沒有被分配到cpu,處於 執行緒就緒佇列 等待系統為其分配cpu。就...

java多執行緒 二 執行緒的互斥

多執行緒相對於單執行緒而言,大大的提高了硬體cpu的使用率,提高了處理的速度。任何事物帶來的都是兩面性的,多執行緒為我們帶來效能提高的同時也帶來了許多的安全性問題。說互斥之前,先說一下什麼是互斥,舉個列子,一天去atm機取錢,如果沒有互斥的話,你正取著錢突然有個人衝進來把你的錢搶走了。這時候你想,要...

java多執行緒學習(二)執行緒的基本方法

sleep long millis 作用是讓當前執行緒休眠指定的毫秒,使當前執行緒進入阻塞狀態,期間會讓出cpu的資源,但不會釋放已獲得的鎖.到達指定時間後,執行緒會從阻塞狀態變成 可執行狀態,重新競爭cpu的資源 static void sleep long millis 這是thread類中的靜...