第23天 執行緒的排程問題(優先順序)

2021-07-24 19:06:10 字數 912 閱讀 6384

執行緒的生命週期:執行緒從建立到死亡的過程稱為執行緒的乙個」生命週期「。在某個時間點上,執行緒具有不同的狀態,主要有以下四種狀態:

1.建立狀態

2.可執行狀態

3.非可執行狀態

4.終止狀態

執行緒總是存在優先順序,優先順序範圍在1~10之間。jvm執行緒排程程式是基於優先順序的搶先排程機制。在大多數情況下,當前執行的執行緒優先順序將大於或等於執行緒池中任何執行緒的優先順序。

注意:當設計多執行緒應用程式的時候,一定不要依賴於執行緒的優先順序。因為執行緒排程優先順序操作是沒有保障的,只能把執行緒優先順序作用作為一種提高程式效率的方法,但是要保證程式不依賴這種操作。

當執行緒池中線程都具有相同的優先順序,排程程式的jvm實現自由選擇它喜歡的執行緒。這時候排程程式的操作有兩種可能:一是選擇乙個執行緒執行,直到它阻塞或者執行完成為止。二是時間分片,為池內的每個執行緒提供均等的執行機會。

設定執行緒的優先順序:執行緒預設的優先順序是建立它的執行執行緒的優先順序。

可以通過setpriority(int newpriority)更改執行緒的優先順序。例如:

thread t = new mythread();

t.setpriority(7);

t.start();

執行緒優先順序為1~10之間的正整數,jvm從不會改變乙個執行緒的優先順序。然而,1~10之間的值是沒***的。一些jvm可能不能識別10個不同的值,而將這些優先順序進行每兩個或多個合併,變成少於10個的優先順序,則兩個或多個優先順序的執行緒可能被對映為乙個優先順序。

執行緒預設優先順序是5,thread類中有三個常量,定義執行緒優先順序範圍:

max_priority

執行緒的最高優先順序。代表常量10

min_priority

執行緒的最低優先順序。代表常量1

norm_priority

執行緒的預設優先順序。代表常量5

第5課 執行緒的排程和執行緒的優先順序

執行緒優先順序相同的情況,cpu可以執行乙個執行緒大約20ms。而在系統中的執行緒有不同的優先順序,這將影響排程程式如何選擇下乙個可排程執行緒,系統分配cpu時,會先分配給優先順序高的執行緒。但是高優先順序的不一定是可排程狀態,所以低有先級的也會執行到 系統預設優先級別為0 版本 2 dll命令 g...

Java多執行緒 執行緒的排程 優先順序

與執行緒休眠類似,執行緒的優先順序仍然無法保障線程的執行次序。只不過,優先順序高的執行緒獲取cpu資源的概率較大,優先順序低的並非沒機會執行。執行緒的優先順序用1 10之間的整數表示,數值越大優先順序越高,預設的優先順序為5。在乙個執行緒中開啟另外乙個新執行緒,則新開執行緒稱為該執行緒的子執行緒,子...

Linux執行緒優先順序對排程影響

首先,linux是乙個時分作業系統,普通執行緒每次被排程獲得執行的最長時間是確定的,即乙個tick,通過核心 config hz可配置。在tick中斷時會發生,核心會觸發執行緒排程 同時,當前正在執行的執行緒主動讓出cpu時,也會觸發排程。除此之外,其它中斷 系統呼叫等也能觸發執行緒排程。linux...