更新時間:2021年11月10日13時52分 來源:傳智教育 瀏覽次數(shù):
在應用程序中,如果要對線程進行調(diào)度,最直接的方式就是設置線程的優(yōu)先級。優(yōu)先級越高的線程獲得CPU執(zhí)行的機會越大,而優(yōu)先級越低的線程獲得CPU執(zhí)行的機會越小。線程的優(yōu)先級用1~10的整數(shù)來表示,數(shù)字越大優(yōu)先級越高。除了可以直接使用數(shù)字表示線程的優(yōu)先級外,還可以使用Thread類中提供的3個靜態(tài)常量表示線程的優(yōu)先級,如下所示。
Thread類的靜態(tài)常量 | 功能描述 |
---|---|
static int MAX_PRIORITY | 表示線程的最高優(yōu)先級,值為10 |
static int MIN_PRIORITY | 表示線程的最低優(yōu)先級,值為1 |
static int NORM_PRIORITY | 表示線程的普通優(yōu)先級,值為5 |
程序在運行期間,處于就緒狀態(tài)的每個線程都有自己的優(yōu)先級,例如,main線程具有普通優(yōu)先級。然而線程優(yōu)先級不是固定不變的,可以通過Thread類的setPriority(int newPriority)方法進行設置,setPriority()方法中的參數(shù)newPriority接收的是1~10的整數(shù)或者Thread類的3個靜態(tài)常量。下面通過一個案例演示不同優(yōu)先級的兩個線程在程序中的運行情況,如下所示。
// 定義類MaxPriority實現(xiàn)Runnable接口 class MaxPriority implements Runnable{ public void run(){ for (int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName() +"正在輸出:"+i); } } } // 定義類MinPriority實現(xiàn)Runnable接口 class MinPriority implements Runnable { public void run(){ for(int i =0; i<10; i++){ System.out.println(Thread.currentThread().getName() +"正在輸出:"+i); } } } public class Example01{ public static void main (String[] args){ // 創(chuàng)建兩個線程 Thread minPriority = new Thread (new MinPriority(), "優(yōu)先級較低的線程"); Thread maxPriority = new Thread(new MaxPriority(),"優(yōu)先級較高的線程"); minPriority.setPriority (Thread.MIN_PRIORITY); //設置線程的優(yōu)先級為1 maxPriority.setPriority (Thread.MAX_PRIORITY); //設置線程的優(yōu)先級為10 //開啟兩個線程 maxPriority.start(); minPriority.start(); } }
下面代碼的運行結果如下圖所示。
第2~8行代碼定義了MaxPriority類并實現(xiàn)了Runnable接口,第10~16行代碼定義實現(xiàn)了Runnable接口的MinPriority類,并在MaxPriority類與MinPriority類中使用for循環(huán)打印正在發(fā)售的票數(shù),在第22行代碼中使用MIN_PRIORITY方法設置minPriority線程的優(yōu)先級為1,在第23行代碼中使用MAX_PRIORITY方法設置manPriority線程優(yōu)先級為10。
從運行結果可以看出,優(yōu)先級較高的maxPriority線程先運行,運行完畢后優(yōu)先級較低的minPriority線程才開始運行。所以優(yōu)先級越高的線程獲取CPU切換時間片的概率就越大。
猜你喜歡