Java 多執行緒(三) 執行緒的生命週期及優先順序

2021-06-27 05:21:02 字數 1539 閱讀 7808

執行緒的生命週期:乙個執行緒從建立到消亡的過程。

如下圖,表示執行緒生命週期中的各個狀態:

執行緒的生命週期可以分為四個狀態:

1.建立狀態:

當用new操作符建立乙個新的執行緒物件時,該執行緒處於建立狀態。

處於建立狀態的執行緒只是乙個空的執行緒物件,系統不為它分配資源。

2.可執行狀態:

執行執行緒的start()方法將為執行緒分配必須的系統資源,安排其執行,並呼叫執行緒體——run()方法,這樣就使得該執行緒處於可執行狀態(runnable)。

這一狀態並不是執行中狀態(running),因為執行緒也許實際上並未真正執行。

3.不可執行狀態:

當發生下列事件時,處於執行狀態的執行緒會轉入到不可執行狀態:

呼叫了sleep()方法;

執行緒呼叫wait()方法等待特定條件的滿足;

執行緒輸入/輸出阻塞。

返回可執行狀態:

處於睡眠狀態的執行緒在指定的時間過去後;

如果執行緒在等待某一條件,另乙個物件必須通過notify()或notifyall()方法通知等待執行緒條件的改變;

如果執行緒是因為輸入輸出阻塞,等待輸入輸出完成。

4.消亡狀態:

當執行緒的run()方法執行結束後,該執行緒自然消亡。

1.執行緒的優先順序及設定

執行緒的優先順序是為了在多執行緒環境中便於系統對執行緒的排程,優先順序高的執行緒將優先執行。

乙個執行緒的優先順序設定遵從以下原則

執行緒建立時,子繼承父的優先順序。

執行緒建立後,可通過呼叫setpriority()方法改變優先順序。

執行緒的優先順序是1-10之間的正整數。

1- min_priority

10-max_priority

5-norm_priority

如果什麼都沒有設定,預設值是5。

但是不能依靠執行緒的優先順序來決定執行緒的執行順序。

2.執行緒的排程策略

執行緒排程器選擇優先順序最高的執行緒執行。但是,如果發生以下情況,就會終止執行緒的執行:

執行緒體中呼叫了yield()方法,讓出了對cpu的占用權。

執行緒體中呼叫了sleep()方法,使執行緒進入睡眠狀態。

執行緒由於i/o操作而受阻塞。

另乙個更高優先順序的執行緒出現。

在支援時間片的系統中,該執行緒的時間片用完。

java多執行緒 執行緒生命週期

本節目標 了解執行緒的宣告週期 了解執行緒的停止操作 乙個新的執行緒建立之後,通過start 方法進入執行狀態,在執行狀態時可以使用yield 進行執行緒禮讓,但是仍然可以執行,使用wait 方法暫停乙個執行緒。suspend resume stop 都會產生死鎖問題,不建議使用。如果想讓執行緒停止...

java 多執行緒 執行緒的生命週期

執行緒的生命週期主要分為下面5個狀態 當建立thread類的乙個例項 物件 繼承thread類,實現runnable介面,呼叫callable介面,此執行緒進入新建狀態 未被啟動 執行緒已被啟動,執行緒物件建立好之後進入就緒狀態,此時會等待獲取cpu的執行權 獲取到cpu執行權之後,執行緒物件開始執...

JAVA 多執行緒 生命週期

1 新建 當乙個執行緒ticktthread1 thread1 new ticktthread1 視窗1 ticket 被new 出來的時候。執行緒就是乙個新建的狀態。2 就緒狀態 當呼叫了start 方法之後。進入就緒狀態。就緒狀態是什麼狀態 某乙個時刻cpu 只能處理乙個執行緒的事物。把時間片分...