JAVA基礎知識之多執行緒 執行緒的生命週期(狀態)

2021-08-20 10:14:12 字數 2139 閱讀 1542

執行緒有五個狀態,分別是新建(new)、就緒(runnable)、執行(running)、阻塞(blocked)和死亡(dead)。

程式使用new會新建乙個執行緒,new出的物件跟普通物件一樣,jvm會為其分配記憶體,初始化成員變數等,此時執行緒並沒有執行,而是就是新建狀態。

當執行緒物件呼叫start後,執行緒將進入就緒狀態。jvm會為其建立函式排程棧和計數器,但此時執行緒依然沒有執行,而是等待獲取cpu執行片

下面的例子可以證明當執行緒物件呼叫start後,並不一定立即執行,

1

2

3

4

5

6

7

for(inti=0; i<50; i++)

}

上面是在main中建立子執行緒,下面是執行結果,

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

...

main18

main19

main20

main21

main22

newthread10

main23

newthread11

main24

newthread12

main25

...

從上面的執行結果可以看到,原本在main中i=20的時候新建了乙個子執行緒,並立即呼叫了start()使執行緒進入就緒狀態,但是一直等到i=22的時候,子執行緒才開始執行,所以子執行緒何時會開始執行取決於cpu執行片的分配,由jvm排程器決定。

當就緒狀態的執行緒獲取了cpu執行片的之後,就進入執行狀態,但是在執行過程中,可能會因為以下原因使執行緒進入阻塞狀態,

執行緒從執行進入阻塞狀態之後,接著只能繼續阻塞或者再次進入就緒狀態,下面情況會使執行緒由阻塞狀態重新進入就緒狀態,

下圖演示了執行緒狀態轉換過程,

注意從上圖可知,

執行緒從阻塞狀態只能進入就緒狀態,

通常情況下,就緒狀態和執行狀態的轉換是不受程式控制的,而是由jvm執行緒排程機制控制的

yield()方法可以讓執行狀態的執行緒進入就緒狀態

執行緒結束後就處於死亡狀態,執行緒會以如下三種方式結束,

注意,子執行緒一旦啟動,其地位和主線程是一樣的,所以一旦主線程結束了,子執行緒不會受影響,不會跟著結束

執行緒物件的isalive()方法在就緒,執行,阻塞時返回true,在新建,死亡時返回false

對已經死亡的執行緒呼叫start()是無效的,會丟擲異常。 死亡的執行緒不可再次作為執行緒來執行。

對於新建的執行緒,呼叫兩次start()方法也會丟擲異常

java基礎之多執行緒的基礎基礎知識

程序是程式的一次執行過程,是系統執行程式的基本單位,因此程序是動態的。系統執行乙個程式即是乙個程序從建立,執行到消亡的過程。如下圖所示,在 windows 中通過檢視任務管理器的方式,我們就可以清楚看到 window 當前執行的程序 exe檔案的執行 執行緒與程序相似,但執行緒是乙個比程序更小的執行...

Java多執行緒基礎知識

一 執行緒執行狀態 1.執行緒執行狀態圖 執行緒共包括以下5種狀態。1.新建狀態 new 執行緒物件被建立後,就進入了新建狀態。例如,thread thread new thread 2.就緒狀態 runnable 也被稱為 可執行狀態 執行緒物件被建立後,其它執行緒呼叫了該物件的start 方法,...

Java基礎之多執行緒

實現介面runnable 實現介面callable 結合執行緒池 實現callable介面或者runnable介面 呼叫如下方法即可 結束任務 執行緒池方式 初始化執行緒池 executorservice pool executors.newfixedthreadpool 2 可以執行runnabl...