1、概述
執行緒具有生命週期,其中包含7種狀態,分別為出生狀態、就緒狀態、執行狀態、等待狀態、休眠狀態、阻塞狀態和死亡狀態。出生狀態就是執行緒被建立時處於的狀態,在使用者使用該執行緒例項呼叫start()方法之前都處於出生狀態;當使用者呼叫start()方法後,執行緒處於就緒狀態(又被稱為可執行狀態);當執行緒得到系統資源後就進入執行狀態。
一旦執行緒進入可執行狀態,它會在就緒與執行狀態下切換,同時也有可能進入等待、休眠、阻塞或死亡狀態。當處於執行狀態下的執行緒呼叫thread類中的wait()方法時,該執行緒變進入等待狀態,進入等待狀態的執行緒必須電泳 thread類中的notify()方法才能被喚醒,而notifyall()方法時將所有處於等待狀態下的執行緒喚醒;當執行緒呼叫thread類中的sleep()方法時,則會進入休眠狀態。如果乙個執行緒在執行狀態下發出輸入/輸出請求,該執行緒將進入阻塞狀態,在其等待輸入/輸出結束時執行緒進入就緒狀態,對於阻塞的執行緒來說,及時系統資源空閒,執行緒依然不能回到執行狀態。當執行緒的run()方法執行完畢時,執行緒進入死亡狀態。
2、如下圖描述了執行緒宣告週期中的各種狀態:
3、雖然多執行緒看起來像同時執行,但事實上在同一時間點上只有乙個執行緒被執行,只是執行緒之前切換較快,所以才會使人產生執行緒時同時進行的假象。在windows作業系統中,系統會為每個執行緒分配一小段cpu時間片,一旦cpu時間片結束就會將當前執行緒換位下乙個執行緒及時改執行緒沒有結束。
現在可以總結出使執行緒處於就緒狀態有以下幾種方法:
a、呼叫sleep()方法
b、呼叫wait()方法
c、等待輸入/輸出完成
當執行緒處於就緒狀態後,可以用以下幾種方法使執行緒再次計入執行狀態:
a、執行緒呼叫notify()方法
b、執行緒呼叫notifyall()方法
c、執行緒呼叫interrupt()方法
d、執行緒的休眠時間結束
e、輸入/輸出結束
執行緒的宣告週期和狀態
新建 new 新建立乙個執行緒 就緒 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start方法,該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權 執行 running 就緒狀態的執行緒或者cpu 的使用權,執行程式 阻塞 blocked 阻塞狀態是執行緒因為某...
Jsp servlet的宣告週期
建立servlet的兩個時機 1 客戶端第一次請求某個servlet時候,系統建立該servlet的例項 大部分的servlet都是這種servlet。系統請求時 2 web應用啟動時立即建立servlet例項,即load on startup servlet。應用啟動時 servlet的宣告週期 ...
unity的宣告週期
物理更新一般在fixedupdate 每固定幀繪製時執行一次,和 update 不同的是 fixedupdate 是渲染幀執行,如果你的渲染效率低下的時候 fixedupdate 呼叫次數就會跟著下降。fixedupdate 比較適用於物理引擎的計算,因為是跟每幀渲染有關。update 就比較適合做...