執行緒的生命週期 執行和阻塞

2021-09-25 16:38:24 字數 954 閱讀 5793

執行(running)

處於就緒狀態的執行緒獲得cpu,開始執行run()方法的執行緒執行體,則該執行緒處於執行狀態。

阻塞(blocked)

當乙個執行緒開始執行後,不可能一直處於執行狀態(除非它的執行緒執行體足夠短,瞬間就執行結束了),執行緒在執行過程中需要被中斷,目的是使其他執行緒獲得執行的機會,執行緒排程的細節取決於底層平台所採用的策略。

running->blocked

當發生如下情況時,執行緒將會進入阻塞狀態:

(1)執行緒呼叫sleep()方法主動放棄所占用的處理器資源。

(2)執行緒呼叫了乙個阻塞式io方法,在該方法返回之前,該執行緒被阻塞。

(3)執行緒試圖獲得乙個同步監視器,但該同步監視器正被其他執行緒持有。

(4)執行緒在等待某個通知(notify)。

(5)執行緒呼叫了執行緒的suspend()方法將該執行緒掛起。容易導致死鎖,盡量避免使用。

blocked->runnable

當前正在執行的執行緒被阻塞之後,其他執行緒就可以獲得執行的機會。被阻塞執行緒的阻塞解除後,會重新進入就緒狀態,等待執行緒排程器再次排程它。

當發生如下特定的情況時,可以解除上面的阻塞,讓該執行緒重新進入就緒狀態:

(1)呼叫sleep()方法的執行緒經過了指定時間;

(2)執行緒呼叫的阻塞式io方法已返回;

(3)執行緒成功獲得了試圖取得的同步監視器;

(4)執行緒正在等待某個通知(notify)時,其他執行緒發出了乙個通知;

(5)處於掛起狀態的執行緒被呼叫了resume()方法。

runnable<->running

就緒和執行狀態之間的轉換通常不受程式控制,而是由系統執行緒排程決定,當處於就緒狀態的執行緒獲得處理器資源時,該執行緒進入執行狀態;當處於執行狀態的執行緒失去處理器資源時,該執行緒進入就緒狀態。

但是,呼叫yield()方法可以讓執行狀態的執行緒轉入就緒狀態。

執行緒生命週期

今天看到一段這樣的 handle hthread createthread null,0,add,a,0,null hmutext createmutex null,false,l huchiti closehandle hthread 簡單的說,關閉了執行緒控制代碼 關閉了執行緒,其兩者的生命週期...

執行緒生命週期

本章目標 了解執行緒的生命週期 了解執行緒的停止操作 執行緒的生命週期 注意大部分的執行緒生命週期的方法基本上都已經學過了,那麼在這裡有以下三個新方法 suspend 方法 暫時掛起執行緒 resume 方法 恢復掛起的執行緒 stop 方法 停止執行緒 但是對於執行緒中suspend resume...

執行緒生命週期

執行緒的生命週期分為五種狀態 新建狀態 就緒狀態 執行狀態 阻塞狀態 死亡狀態 剛new出來的執行緒物件。新建狀態呼叫start 方法就進入就緒狀態。就緒狀態的執行緒又叫做可執行狀態,表示當前執行緒具有搶奪cpu時間片的權利 cpu時間片就是執行權 當乙個執行緒搶奪到cpu時間片之後就開始執行run...