每個執行緒都有一個優先順序,高優先順序執行緒的執行優先於低優先順序執行緒。(優先並不代表”優先執行順序”

在一個執行緒中開啟另外一個新執行緒,則新開執行緒稱為該執行緒的子執行緒,子執行緒初始優先順序與父執行緒相同

Java執行緒的優先順序是一個整數 (數字越大優先順序越高) 其取值範圍是 1 (Thread.MIN_PRIORITY ) – 10 (Thread.MAX_PRIORITY )

新建執行緒的預設優先順序是 NORM_PRIORITY = 5

package ThreadDemo;

class MyThread3 implements Runnable {
	int x; // 宣告x

	MyThread3(int x) {// 建構元
		this.x = x;
	}

	public void run() {// Runnable 介面(interfce),有抽象函數 run(),因此我們需要定義 run()
		for (int i = 1; i <= x; i++) {
			System.out.println(Thread.currentThread().getName() + "=" + i);// currentThread是Thread內部類(class):獲得當前線程的
		}
	}
}


public class ThreadPriorityDemo {

	public static void main(String[] args) {
		MyThread3 t= new MyThread3(3);
		Thread t1 = new Thread(new MyThread3(2),"執行緒-A");
		Thread t2 = new Thread(new MyThread3(3),"執行緒-B");
		//setPriority() 用來設定優先順序
//		getPriority() 用來取得順序之值
		t1.currentThread().setName("Top");
		t1.currentThread().setPriority(1);//1~10 預設是5 數字越小,優先順序越低
		
		t2.currentThread().setName("Second");
		t2.currentThread().setPriority(10);//1~10 預設是5 數字越大,優先順序越高
		
		
		t1.start();
		t2.start();
		
		System.out.println("Thread1 ="+t1.currentThread().getName());
		System.out.println("Thread2 ="+t2.currentThread().getName());
	
		int count=Thread.activeCount();//當前活動中的Thread執行續數量
		System.out.println("Thread Active 激活中的執行續數量 ="+count);
		
	}

}

輸出 狀況:

↓ 可以看出 並沒有按照理想的順序執行 上面的程式碼並沒有什麼卵用…

Thread1 =Second
Thread2 =Second
執行緒-A=1
執行緒-B=1
執行緒-A=2
Thread Active 激活中的執行續數量 =3
執行緒-B=2
執行緒-B=3

執行緒的優先順序仍然無法保障執行緒的執行次序。

只不過,優先順序高的執行緒獲取CPU資源的概率較大,優先順序低的並非沒機會執行。

如果CPU有空閒,即使是低優先順序的執行緒,也可以得到足夠的執行時間,接近滿負荷執行。
如果CPU比較繁忙,優先順序的作用就體現出來了,優先順序高的執行緒能得到比較多的執行時間,優先順序比較低的執行緒也能得到一些執行時間,但會少一些;CPU越繁忙,差異通常越明顯。

發佈留言