@maohoo 線程的六種狀態

 

查看Thread類的源碼,可以看到其包含一個內部枚舉State, 從而發現線程擁有六個狀態:


(1)New : 新建;

線程剛剛被創建,但是並未被啓動,即未調用start()方法。

(2)Runnable : 可運行;

可以在java虛擬機中運行的狀態,但是它可能在運行自己的代碼,也可能沒有,這取決於操作系統處理器。

(3)Blocked :  被阻塞;

當一個線程試圖獲取一個內部的對象鎖,而該對象鎖被其他的線程持有,則該線程進入被阻塞狀態。

(4)Waitting : 等待;

如果當前線程調用wait()方法,則當前線程進入Time waiting但是這個時候當前線程會釋放所佔有的JVM資源,進入這個狀態過後是不能自動喚醒的,必須調用notify()或者notifyAll()方法,線程進入Waiting

(5)Timed_Waitting: 計時等待;

Object.wait、Thread.join、Lock.tryLock和Condition.await等方法有超時參數,還有Thread.sleep方法、LockSupport.parkNanos方法和LockSupport.parkUntil方法,這些方法會導致線程進入計時等待狀態,如果超時或者出現通知,都會切換會可運行狀態

(6)Terminated :  被終止;

因爲run方法正常退出而死亡,或者因爲沒有捕獲的異常終止了run方法而死亡。



簡易狀態轉換圖:







發佈了40 篇原創文章 · 獲贊 22 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章