全國咨詢/投訴熱線:400-618-9090

首頁技術文章正文

Java基礎教程:多線程(5)-----線程的調度之優先級

創建時間:2017-11-14 16:33:51.0 來源:黑馬程序員

程序中的多線程是并發執行的,但這只是宏觀現象。對于大多數計算機而言,CPU只有一個,在某個特定的時刻只能執行一條機器指令,多線程的每個線程只有得到CPU的使用權才能執行指令。Java虛擬機按照特定機制為多個線程分配CPU的使用權就是線程的調度。

在計算機中,CPU的調度有兩種調度模型,分別是分時調度模型和搶占式調度模型。所謂分時調度模型是指讓所有的線程輪流獲得CPU的使用權,并且平均分配每個線程占用的CPU的時間片。而搶占式調度模型是指優先讓可運行池中優先級高的線程占用CPU,如果可運行池中的線程優先級相同,那么就隨機選擇一個線程,使其占用CPU。處于運行狀態的線程會一直運行,直至它不得不放棄CPU。Java虛擬機采用的就是搶占式調度模型,這種默認的方式在很多時候都是適用的,程序員不需要去關心它,但有時候需要改變這種分配的模式,這時則需要控制CPU的調度。JDK中提供了一系列的方法用于控制線程的調度。

1569029705460_Java多線程.jpg

線程的優先級

在線程中有優先級的機制,線程的優先級用1~10之間的整數來表示,數字越大則表示優先級越高。除了數字,還可以使用Thread類中提供的三個靜態常量表示線程的優先級,他們分別是:MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORIY。

優先級高的線程獲得CPU執行的機會越大,而優先級低的線程獲得CPU執行的機會越小。在默認情況下,每個線程都有自己的優先級,例如main線程具有普通優先級。線程優先級不是固定不變的,通過調用Thread類的setPriority(int newPriority)方法可以進行改變,setPriority()方法的數newPriority接收1~10之間的數或者Thread類的三個靜態常量,代碼如下所示:

class MaxPriority implements Runnable {

publicvoid run() {

for(int i = 0; i < 3; i++) {

System.out.println(Thread.currentThread().getName()

+":優先級為高,循環變量為" + i);

}

}

}

class MinPriority implements Runnable {

publicvoid run() {

for(int i = 0; i < 3; i++) {

System.out.println(Thread.currentThread().getName()

+":優先級為低,循環變量為" + i);

}

}

}

public class Example06 {

publicstatic void main(String[] args) {

ThreadminPriority = new Thread(new MinPriority());

ThreadmaxPriority = new Thread(new MaxPriority());

minPriority.setPriority(Thread.MIN_PRIORITY);

maxPriority.setPriority(10);

minPriority.start();

maxPriority.start();

}

}

運行結果為:

Thread-1:優先級為高,循環變量為0

Thread-1:優先級為高,循環變量為1

Thread-1:優先級為高,循環變量為2

Thread-0:優先級為低,循環變量為0

Thread-0:優先級為低,循環變量為1

Thread-0:優先級為低,循環變量為2

在程序中創建了兩個線程minPriority和maxPriority,分別將線程的優先級設置為1和10,從運行結果可以看出優先級高的maxPriority線程先運行完畢后優先級低的minPriority線程才開始運行。

雖然Java中提供了10個線程優先級,但這些優先級需要操作系統的支持,然而,不同的操作系統支持的優先級并不相同,不能很好的和Java中線程優先級一一對應,因此,在設計多線程應用程序時,其功能的實現一定不能依賴于線程的優先級,而只能把線程優先級作為一種提高程序效率的手段。友情提示:獲得更多學科學習視頻+資料+源碼,請加QQ:3276250747。


本文版權歸黑馬程序員JavaEE學院所有,歡迎轉載,轉載請注明作者出處。謝謝!


作者:黑馬程序員JavaEE培訓學院


首發:http://java.itheima.com/

相關推薦:

在線咨詢 我要報名

时时开奖结果怎样自动发到qq群