1. 程式人生 > >java設定執行緒優先順序的誤區

java設定執行緒優先順序的誤區

對執行緒有一些瞭解的讀者知道,線上程中,我們可以通過執行緒的setPriority()方法來設定執行緒的優先順序,方法的引數是一個整型值,可以填寫從1~10的值。當我們建立執行緒的時候,java預設給執行緒設定的優先順序是5,1為最低優先順序,10為最高優先順序。下面的例子建立了a,b兩個執行緒並給它們設定了優先順序:

public static void main(String[] args) {
		Thread a=new Thread(new Runnable() {
			@Override
			public void run() {
				for(int i=0;i<
10;i++) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("a"); } System.out.println("a執行緒執行完畢"); } }); Thread b=new Thread(new Runnable() { @Override public
void run() { for(int i=0;i<10;i++) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("b"); } System.out.println("b執行緒執行完畢"); } }); a.setPriority(1); b.
setPriority(10); a.start(); b.start(); }

誤區

那麼,我們很容易就以為,執行緒的優先順序是執行緒從cpu手裡搶到資源的權重,認為優先順序越高的執行緒越容易線上程競爭中獲勝,這是初學者的一個誤區。

例如,剛剛上面的程式碼給a執行緒設定了最低優先順序,給b執行緒設定了最高優先順序,按照錯誤的想法,a執行緒更容易搶到資源,那麼在同一時間內打印出的a字母應該比b多,可事實結果是什麼呢?
在這裡插入圖片描述
多實驗幾次,我們會發現,優先順序和執行緒搶到資源的概率並沒有關係,而是在有多個執行緒的時候,用來設定一上來從哪個執行緒開始執行的優先順序的,和之後搶奪cpu的權重並無關係。