執行緒的5種狀態及其之間的切換
阿新 • • 發佈:2018-12-26
參考書籍:java多執行緒程式設計核心技術
如上圖所示:
我們可以清楚的看到執行緒的幾種狀態
1.新建:使用NEW關鍵字來建立執行緒。
2.可執行:當前執行緒呼叫start()方法,使執行緒處於Runnable 狀態,等待獲取CPU。
3.執行中:如果執行緒搶到了CPU資源,這時的執行緒處於Running狀態,Runnable和Running是可以相互切換的,比如,其他優先順序較高執行緒搶佔CPU資源,這時候執行緒就會變為Runnable狀態。
進入Runnable狀態大體分為5種:
- 執行緒呼叫sleep()方法經過的時間超過了指定的時間。
- 執行緒正在等待某個通知,其他執行緒發出了通知。
- 處於掛起的執行緒呼叫resume()方法。
- 執行緒呼叫的阻塞IO已返回,阻塞方法執行完畢。
- 執行緒成功的獲取到了同步監視器。
4.阻塞:出現Blocked的情況大概分為5種
- 執行緒呼叫sleep()方法,主動放棄佔用的CPU資源。
- 執行緒呼叫wait()方法,等待某個通知。
- 執行緒呼叫suspend()方法將執行緒掛起,容易導致死鎖,儘量避免使用此方法。
- 執行緒呼叫阻塞式IO方法,在方法返回前,執行緒被阻塞。
- 執行緒試圖獲得一個同步監視器,但該同步監視器被其他執行緒所持有。
5.死亡:run()方法執行結束後進入銷燬階段,整個執行緒執行完畢。