不同的線程就像是不同的工作小分隊,而系統的計算資源就像是工作場所,工作場所一次只能讓一個線程來工作,與此同時,其它的線程就需要等待。但是不同的小分隊的重要程度不同,就應該分別看待,這就是優先級的設定。Java用setPriority方法來給線程設置優先級, 數字1~10分別代碼10個不同的優先級,1的優先級最小,10的優先級最高,如果不設定優先級,則默認的優先級爲5。Java還用3個常量分別代表高中低的優先級, 分別是:MAX_PRIORITY, NORM_PRIORITY, MIN_PRIORITY.
下面這個例子展示瞭如果使用setPriority()方法:
class demothread1 extends Thread{ //線程類demothread1
public void run(){ //run方法,輸出a到h的字符
for(char i='a';i<'h';i++){
System.out.print(i);
}
}
}
class demothread2 extends Thread{ //線程類demothread2
public void run(){ //線程類,輸出1到9的數字
for(int i=1;i<9;i++){
System.out.print(i);
}
}
}
public class demosetPriority{
public static void main(String[] args){
demothread1 d1 = new demothread1();
demothread2 d2 = new demothread2();
d1.setPriority(1); //設定線程類實例d1的優先級
d2.setPriority(10); //設定線程類實例d2的優先級
d1.start(); //啓動d1
d2.start(); //啓動d2
System.out.println(); //主線程main中的換行語句
}
}
編譯執行之,結果如下:
可見,在設定了優先級之後,優先級高的線程有更高的概率得到優先執行,但是結果也不是一定的。先執行低優先級的線程的時候也有。可見,優先級只是決定執行順序的一個因素,應該是一個重要因素,但是不絕對。