天天看點

多線程的運作狀态(五種狀态)

建立(new)狀态

新建立了一個線程對象。準備好了一個多線程的對象(沒有調用start()方法 )

就緒(runnable)狀态

調用了start()方法, 線程即進入就緒狀态。處于就緒狀态的線程,隻是說明此線程已經做好了準備,随時等待CPU排程執行(擷取CPU的使用權),并不是說執行了t.start()此線程立即就會執行;

運作(running)狀态

執行run()方法(當CPU開始排程處于就緒狀态的線程時,此時線程才得以真正執行,即進入到運作狀态。

注:就緒狀态是進入到運作狀态的唯一入口,也就是說,線程要想進入運作狀态執行,首先必須處于就緒狀态中;)

阻塞(blocked)狀态

處于運作狀态中的線程由于某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀态,直到其進入到就緒狀态,才有機會再次被CPU調用以進入到運作狀态。根據阻塞産生的原因不同,阻塞狀态又可以分為三種:

1.等待阻塞:運作( running )的線程執行 o . wait ()方法, JVM 會把該線程放 入等待隊列(waitting queue )中。

2.同步阻塞:運作( running )的線程在擷取對象的同步鎖時,若該同步鎖被别的線程占用,則 JVM 會把該線程放入鎖池( lock pool )中。

3.其他阻塞: 運作( running )的線程執行Thread . sleep ( long ms )或 t . join ()方法,或者發出了 I / O 請求時, JVM會把該線程置為阻塞. 當 sleep ()狀态逾時、 join ()等待線程終止或者逾時、或者 I / O 處理完畢時,線程重新轉入可運作( runnable )狀态。

終止(dead)狀态

線程 run ()、 main () 方法執行結束,或者因異常退出了 run ()方法,則該線程結束生命周期。死亡的線程不可再次複生。

線程狀态總述

繼續閱讀