本文作為圖解java并發編程的第二篇,前一篇訪問地址如下所示:
- 圖解行程執行緒、互斥鎖與信號量-看完還不懂你來打我
圖形說明
在開始想寫這篇文章之前,我去網上搜索了很多關于執行緒狀態轉換的圖,我驚訝的發現:超過80%的圖都是不完整的,或者是錯的,所以我只好再次去閱讀原始碼,然后畫出下面的這張圖,理解了這張圖,對于大家理解java 執行緒的方法呼叫及開發程序會有很大的幫助,

- 同步阻塞狀態比較好理解,就是互斥鎖,當前執行緒使用到的代碼塊,只有我用完了你才能用,
- 延時等待狀態與等待狀態的主要區別在于
- 延時等待狀態不會釋放任何資源及監視器,我就是占著茅坑不拉屎,也不給你用,我就是休息一會,我休息完了,我的還是我的,
- 等待阻塞狀態會暫時釋放相關執行緒資源及監視器,我的資源暫時借給你用,等我notify找你的時候你要將資源還給我
Thread.State原始碼注釋
public enum State {
/**
* 新生狀態:執行緒物件創建,但是還未start()
*/
NEW,
/**
* 執行緒處于可運行狀態,但是這個可運行狀態并不代表執行緒一定在虛擬機中執行,
* 需要等待從作業系統獲取到資源(比如處理器時間片),才能真正的去運行
*/
RUNNABLE,
/**
* 當前執行緒處于阻塞狀態,正在等待另一個執行緒的monitor lock釋放,才進入synchronized代碼塊或方法
*/
BLOCKED,
/**
* 呼叫Object#wait() 、 Thread.join方法后當前執行緒處于等待狀態,
* 等待其他的執行緒執行特定的動作,才能從等待狀態退出,
* 比如:Object.wait()的執行緒需要等待其他執行緒呼叫Object.notify()、Object.notifyAll()才能退出
* 比如:呼叫了Thread.join()的執行緒需要等待指定的執行緒執行完成才能退出等待狀態,
*/
WAITING,
/**
* 進入特定時間內的等待狀態,等待一段指定的時間sleep(timed)、wait(timed)或者等待Thread.join(timed)的時間.
* 到達指定時間點自動退出恢復到RUNNABLE狀態
*/
TIMED_WAITING,
/**
* 執行緒結束狀態
*/
TERMINATED;
}
歡迎關注我的博客,里面有很多精品合集
- 本文轉載注明出處(必須帶連接,不能只轉文字):字母哥博客,
覺得對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創作動力! ,另外,筆者最近一段時間輸出了如下的精品內容,期待您的關注,
- 《手摸手教你學Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《實戰前后端分離RBAC權限管理系統》
- 《實戰SpringCloud微服務從青銅到王者》
- 《VUE深入淺出系列》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/3003.html
標籤:Java
上一篇:寫出一手爛代碼的 19 條準則!
