執行緒狀態分析

2021-10-08 16:26:58 字數 1533 閱讀 6999

看了很多資料,有一些資料顯示執行緒的狀態是5種,還有的說是7種,我覺得還是根據原始碼分析才比較官方,準確,如下(我是基於jdk1.8的):

public

enum state

我們發現這是乙個列舉型別,狀態顯示是六種,分別是

新建(new):使用 new 關鍵字和 thread 類或其子類建立乙個執行緒物件後,該執行緒物件就處於新建狀態。它保持這個狀態直到程式 start() 這個執行緒。

就緒(runnable):當執行緒物件呼叫了start()方法之後,該執行緒就進入就緒狀態。就緒狀態的執行緒處於就緒佇列中,要等待jvm裡執行緒排程器的排程

阻塞(block):如果乙個執行緒執行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之後,該執行緒就從執行狀態進入阻塞狀態。在睡眠時間已到或獲得裝置資源後可以重新進入就緒狀態。可以分為三種:

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

同步阻塞:執行緒在獲取 synchronized同步鎖失敗(因為同步鎖被其他執行緒占用)。

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

等待(waiting):處於這種狀態的執行緒不會被分配cpu執行時間,它們要等待被顯式地喚醒,否則會處於無限期等待的狀態

計時等待(timed_waiting):處於這種狀態的執行緒不會被分配cpu執行時間,不過無須無限期等待被其他執行緒顯示地喚醒,在達到一定時間後它們會自動喚醒

終止(terminated):乙個執行狀態的執行緒完成任務或者其他終止條件發生時,該執行緒就切換到終止狀態

我們來看看他們的轉換關係吧

總結分析

//預設是5

public

final

static

int max_priority =

10;執行緒優先順序從1-10,其中數字越大表示優先級別越高,同時獲得jvm排程執行的可能性越

執行緒阻塞狀態例項分析

有三種方法可以暫停threads執行 1.sleep方法 sleep時別的執行緒也不可以訪問鎖定物件。2.yield方法 讓出cpu的使用權,從執行態直接進入就緒狀態。讓cpu重新挑選哪乙個執行緒進入執行狀態。3.join方法 當某乙個執行緒等待另乙個執行緒執行結束後,才繼續執行時,使用join方法...

Java執行緒 執行緒狀態

執行緒可以建立6狀態 new 新建立 runnable 可執行 blocked 被阻塞 waiting 等待 timed waiting 計時等待 terminated 被終止 1 新建執行緒 2 可執行執行緒 一旦呼叫start 方法,執行緒就處於runnable狀態,但是卻不必保持執行。執行中的...

執行緒狀態 執行緒池

1.執行緒狀態變遷 2.為什麼notify notifyall wait要在同步方法或塊中執行 2.1在j a中,所有物件都能夠被作為 監視器monitor 指乙個擁有乙個獨佔鎖,乙個入口佇列和乙個等待佇列的實體entity。所有物件的非同步方法都能夠在任意時刻被任意執行緒呼叫,此時不需要考慮加鎖的...