Java併發程式設計 執行緒的基本狀態

2021-09-07 06:10:38 字數 1786 閱讀 9452

執行緒基本上有5種狀態,分別是:new、runnable、running、blocked、dead。

當執行緒物件對建立後,即進入了新建狀態,如:thread t = new mythread();

當呼叫執行緒物件的start()方法(t.start();),執行緒即進入就緒狀態。處於就緒狀態的執行緒,只是說明此執行緒已經做好了準備,隨時等待cpu排程執行,並不是說執行了t.start()此執行緒立即就會執行;

當cpu開始排程處於就緒狀態的執行緒時,此時執行緒才得以真正執行,即進入到執行狀態。注:就     緒狀態是進入到執行狀態的唯一入口,也就是說,執行緒要想進入執行狀態執行,首先必須處於就緒狀態中;

處於執行狀態中的執行緒由於某種原因,暫時放棄對cpu的使用權,停止執行,此時進入阻塞狀態,直到其進入到就緒狀態,才 有機會再次被cpu呼叫以進入到執行狀態。根據阻塞產生的原因不同,阻塞狀態又可以分為三種:

1、等待阻塞

執行狀態中的執行緒執行wait()方法,使本執行緒進入到等待阻塞狀態;

2、同步阻塞

執行緒在獲取synchronized同步鎖失敗(因為鎖被其它執行緒所占用),它會進入同步阻塞狀態;

3、其他阻塞

通過呼叫執行緒的sleep()或join()或發出了i/o請求時,執行緒會進入到阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者i/o處理完畢時,執行緒重新轉入就緒狀態。

執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期。

用一張圖來將其概括的話會更容易記憶:

而乙個執行緒的宣告週期一般從新建狀態(new)開始,到死亡狀態(dead)結束,中間可以存在許多中可能。

如上圖所示,一般情況下會有4個分支情況。

如上圖中紅色箭頭所示,正常狀態下執行緒的宣告週期是這樣的:new -> runnable -> running -> dead。

分別是正常情況(紅色箭頭),發生鎖阻塞(同步阻塞)的情況(藍色箭頭),發生等待阻塞的情況(黃色箭頭),發生其他阻塞的情況(黑色箭頭),分別對應上圖4個不同顏色的流向。

如上圖中藍色箭頭所示,當執行緒進入 running 狀態時進入了 synchronized 方法塊,這時就會發生鎖阻塞,執行緒進入乙個 lock pool 鎖池中。當其獲得鎖之後,又進入到可執行狀態。當cpu分片輪詢到它的時候,它就再次執行,直至 dead 狀態。

如上圖中藍色箭頭所示,當執行緒進入 running 狀態時遇到了 wait() 方法,這時就會發生等待阻塞,它會等待其他執行緒呼叫 notify() 方法釋放鎖之後才可恢復到可執行狀態。當cpu分片輪詢到它的時候,它就再次執行,直至 dead 狀態。等待阻塞和鎖阻塞其實是同一型別的,都是因為爭奪鎖而發生的執行緒等待,唯一的不同是因為它們呼叫的是不同的方式實現,但底層原理相同。要注意的是執行 wait() 方法的時候,執行緒一定要獲得鎖,所以 wait() 方法一般都在 synchronized 方法或**塊中。當其獲得鎖之後進入等待池(wait pool)並釋放鎖。收到 notify() 通知之後等待獲取鎖,獲取鎖之後才可以執行。

當執行緒需要去讀取檔案,而此時檔案又被其他執行緒占用,那麼就會發生阻塞。這時候執行緒需要等待其他執行緒讀取完之後才能繼續進行,這可以稱為 io 阻塞。當然了還有很多種情況,如網路阻塞等等。

Java併發程式設計 執行緒的狀態和執行緒的建立

執行緒的狀態 新建狀態 new 新建立了乙個執行緒物件。就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於 可執行執行緒池 中,變得可執行,只等待獲取cpu的使用權。即在就緒狀態的程序除cpu之外,其它的執行所需資源都已全部獲得。執行狀態 ru...

併發程式設計(1) 執行緒基本狀態和執行緒的建立

1.新建狀態 new 執行緒物件建立後將納入新建狀態.thread t new thread 2.就緒狀態 runnable 呼叫start 進入就緒狀態 3.執行狀態 running cpu開始排程處於執行狀態的執行緒,此執行緒才真正執行 4.阻塞狀態 blocked 處於執行時的執行緒由於某種原...

Java併發程式設計系列之七 執行緒狀態

執行緒的狀態一共有6種,在任意時刻執行緒的狀態只能是其中的一種。正確理解執行緒的狀態有助於我們更容易理解執行緒。具體的執行緒狀態如下 狀態名稱 說明new 初始狀態,執行緒被構建,但是還沒有呼叫start方法 running 執行狀態 blocked 阻塞狀態,表示執行緒阻塞於鎖 waiting 等...