1. 程式人生 > >執行緒的5種狀態及其之間的切換

執行緒的5種狀態及其之間的切換

參考書籍: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()方法執行結束後進入銷燬階段,整個執行緒執行完畢。