我們通過查詢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)進行檢視。
blocked和time_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類中的靜...