執行緒 執行緒的幾種狀態轉換。

2021-09-25 05:01:40 字數 709 閱讀 3409

執行緒在一定條件下,狀態會發生變化。執行緒一共有以下幾種狀態。

1.新建狀態(new)

新建立了乙個執行緒物件。

2.就緒狀態(runnable)

執行緒物件建立後,在其他地方呼叫了該執行緒的start()方法,該執行緒準備好所有執行前的資源,然後位於可執行執行緒池中,變得可執行,等待cpu的執行權。

3.執行狀態(running)

就緒狀態的執行緒,獲得了cpu的使用權。執行自己run方法中的**。

4.阻塞狀態(blocked)

阻塞狀態就是執行緒因為某種原因放棄cpu的使用權。臨時停止執行,直到執行緒退出阻塞狀態,變為就緒狀態,才有可能繼續獲取cpu進入執行狀態。

堵塞的情況分為三種:

5.死亡狀態(dead)

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

1.yield()方法

呼叫這個方法,意思是執行緒放棄當前獲得的cpu時間片,然後回到就緒狀態,這時候此執行緒擁有和其他執行緒同等的競爭力,所以這個執行緒有可能剛放棄cpu,就又拿到cpu,從就緒狀態到執行狀態。

2.鎖池狀態

執行緒a拿到鎖呼叫wait方法,釋放鎖,執行緒b拿到鎖執行自己的方法,執行緒c呼叫a的notify方法喚醒執行緒a,執行緒a因為目前拿不到鎖,所以進入鎖池狀態。鎖池中是所有想要獲取這個物件鎖的佇列。他們先進先出。等執行緒a拿到鎖之後,再次進入就緒狀態,等待cpu分配時間片。

執行緒的幾種狀態

這個是面試經常被問到的問題,多執行緒的話首先要對執行緒的狀態有個清晰的認識才可以 這裡做個簡單的總結 1.新建狀態 new 新建立乙個執行緒物件的初始狀態 也就是通過new關鍵字建立乙個執行緒物件,但並沒有呼叫start方法時候的狀態 thread t new thread tt 2.就緒狀態 ru...

執行緒的幾種狀態

執行緒的幾種狀態及狀態之間的轉化 新建狀態 建立乙個新的執行緒 此時執行緒未啟動 就緒狀態 乙個新建的執行緒並不會自動開始執行,要執行執行緒,必須呼叫執行緒的start 方法,當執行緒物件呼叫start 方法啟動了執行緒,start 方法建立執行緒執行的系統資源,並排程執行緒執行run 方法,當st...

執行緒狀態轉換

退出方法 沒有設定 timeout 引數的 object.wait 方法 object.notify object.notifyall 沒有設定 timeout 引數的 thread.join 方法 被呼叫的執行緒執行完畢 locksupport.park 方法 locksupport.unpark...