執行緒優先順序(菜鳥玩執行緒)
阿新 • • 發佈:2018-12-19
執行緒的優先順序
在作業系統中,執行緒可以劃分為優先順序,優先順序較高的執行緒得到的CPU資源較多,也就是CPU優先執行優先順序較高的執行緒物件中的任務。
設定執行緒的優先順序使用setPriority()方法。
執行緒優先順序的繼承特性
執行緒的優先順序具有繼承性,比如A執行緒啟動B執行緒,則B執行緒的優先順序與A是一樣的。
執行緒優先順序的規則性
高優先順序總是大部分先執行完,但不代表高優先順序的執行緒全部先執行完。
且執行緒的優先順序與程式碼執行順序無關。
執行緒優先順序具有隨機性
優先順序較高的執行緒並不一定每一次都執行完run()方法中的任務。
看誰執行的快
自定義執行緒類
package com.thread13;
public class MyThread1 extends Thread {
private int count = 0;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public void run() {
while (true) {
count++;
}
}
}
package com.thread13;
public class MyThread2 extends Thread {
private int count = 0;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public void run() {
while (true) {
count++ ;
}
}
}
啟動類
package com.thread13;
public class Run {
public static void main(String[] args) throws InterruptedException {
MyThread1 myThread1 = new MyThread1();
//設定優先順序為 5-3
myThread1.setPriority(Thread.NORM_PRIORITY - 3);
myThread1.start();
MyThread2 myThread2 = new MyThread2();
//設定優先順序為 5+3
myThread2.setPriority(Thread.NORM_PRIORITY + 3);
myThread2.start();
Thread.sleep(20000);
myThread1.stop();
myThread2.stop();
System.out.println("a = " + myThread1.getCount());
System.out.println("b = " + myThread2.getCount());
}
}
執行結果
a = 948465056
b = 1029878491
結論
優先順序高的執行緒執行快。