Java執行緒狀態

2021-08-15 21:47:18 字數 2878 閱讀 6397

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 阻塞狀...