1. 新建
( new )
:新建立了乙個執行緒物件。
2. 可執行
( runnable )
:執行緒物件建立後,其他執行緒
(比如
main
執行緒)呼叫了該物件
的 start()方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲
取 cpu 的使用權 。
3. 執行
( running )
:可執行狀態
( runnable )
的執行緒獲得了 cpu 時間片( timeslice ) ,執行程式**。
4. 阻塞
( block )
:阻塞狀態是指執行緒因為某種原因放棄了 cpu 使用權,也即讓出了 cpu timeslice ,暫時停止執行。直到執行緒進入可執行( runnable )狀態,才有 機會再次獲得
cpu timeslice
轉到執行
( running )
狀態。阻塞的情況分三種:
(一).
等待阻塞:執行
( running )
的執行緒執行
o .wait ()方法, jvm 會把該執行緒放
入等待佇列( waitting queue )中。
(二).
同步阻塞:執行
( running )
的執行緒在獲取物件的同步鎖時,若該同步鎖
被別的執行緒占用,則 jvm 會把該執行緒放入鎖池
( lock pool )
中。 (三
). 其他阻塞
: 執行
( running )
的執行緒執行 thread . sleep ( long ms )或 t . join ()方法,或者發出了 i / o 請求時,
jvm
會把該執行緒置為阻塞狀態。當
sleep ()
狀態超時、
join ()
等待執行緒終止或者超時、或者
i / o
處理完畢時,執行緒重新轉入可執行
( runnable )
狀態。
5. 死亡
( dead )
:執行緒
run ()
、 main ()
方法執行結束,或者因異常退出了 run ()方法,則該執行緒結束生命週期。死亡的執行緒不可再次復生。
()執行後執行緒進入阻塞狀態,sleep()使當前執行緒進入停滯狀態,所以執行
sleep()
的執行緒在指定的時間內肯定不會執行
, 同時
sleep
函式不會釋放鎖資源,
sleep
可使優先順序低的執行緒得到執行的機會,當然也可以讓同優先順序和高優先順序的執行緒有執行的機會
yield()
只是使當前執行緒重新回到可執行狀態,所以執行yield()執行緒有可能在進入到可執行狀態後馬上又被執行
. 只能使同優先順序的執行緒有執行的機會。同樣
, yield()
也不會釋放鎖資源
.sleep和
yield
的區別在於
, sleep
可以使優先順序低的執行緒得到執行的機會
, 而
yield
只能使同優先順序的執行緒有執行的機會.(
試驗好像不成立啊?
)join
()執行後執行緒進入阻塞狀態,等待呼叫
join
方法的執行緒結束,再繼續執行。如:
t.join();//
主要用於等待
t執行緒執行結束,若無此句,
main
則會執行完畢,導致結果不可**。(如果在主線程中設定t1.join(0),則主線程會等到
t1執行完後,再執行主線程
)join() 當
join(0)
時等待乙個執行緒直到它死亡
, 當
join(1000)
時等待乙個執行緒
1000納秒,
後回到主線程繼續執行
. join函式為執行緒安全函式
, 即同步函式
. interrupt
()方法不會中斷乙個正在執行的執行緒.就是指執行緒如果正在執行的過程中
, 去呼叫此方法是沒有任何反應的
. 為什麼呢
, 因為這個方法只是提供給 被阻塞的執行緒
, 即當執行緒呼叫了
.object.wait, thread.join, thread.sleep
三種方法之一的時候
, 再呼叫
interrupt
方法,
才可以中斷剛才的阻塞而繼續去執行執行緒
.wait()和
notify()
必須在synchronized函式或
synchronized
block
中進行呼叫。如果在
non-synchronized
函式或non-synchronized
block
中進行呼叫,雖然能編譯通過,但在執行時會發生
illegalmonitorstateexception
的異常。
Java執行緒 執行緒狀態
執行緒可以建立6狀態 new 新建立 runnable 可執行 blocked 被阻塞 waiting 等待 timed waiting 計時等待 terminated 被終止 1 新建執行緒 2 可執行執行緒 一旦呼叫start 方法,執行緒就處於runnable狀態,但是卻不必保持執行。執行中的...
Java 執行緒狀態
乙個執行緒可以處於以下四種狀態 新建 new 當執行緒被建立時,它只會短暫的處於這種狀態.此時它已經分配了必須的系統資源,並執行了初始化.此刻執行緒已經有資格獲得cpu時間了,之後排程器將把這個執行緒 轉變位可執行狀態或阻塞狀態.就緒 runnable 在這種狀態下,只要排程器把時間片分配給執行緒,...
Java執行緒狀態
新建狀態 new 新建立了乙個執行緒物件。就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。執行狀態 running 就緒狀態的執行緒獲取了cpu,執行程式 阻塞狀態 blocked 阻塞狀...