1. 程式人生 > 其它 >Java執行緒的優先順序在什麼時候可以重新設定?

Java執行緒的優先順序在什麼時候可以重新設定?

答案:java執行緒在建立後任何時候都可以重新設定優先順序

在網上搜索“執行緒的優先順序在什麼時候設定,在任何時候都能設定嗎?”之類的問題,得到的答案基本都說:執行緒開始(start)之前,仔細想想好像也合理,但是,實踐是檢驗真理的唯一標準,在沒有程式碼結果證明的情況下的這類答案是不可靠的

下面來驗證一下:
先寫個測試類

public class Test {
	public static void main(String[] args) {
		Runnable r=new Runnable() {
			int num=0;
			@Override
			public void run() {
				// TODO Auto-generated method stub
				//執行緒迴圈阻塞,沒那麼快死亡,方便驗證結果
				for(int i=0;i<100;i++) {
					num++;
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		};
		Thread t=new Thread(r);
		//檢視執行緒建立後預設的優先順序值
		System.out.println(t.getPriority()+"++++++++++");
		System.out.println(t.getPriority()+"++++++++++");
		//執行緒啟動前設定執行緒的優先順序值為7
		t.setPriority(7);
		//執行緒啟動前檢視重新設定後執行緒的優先順序值
		System.out.println(t.getPriority()+"++++++++++1111");
		System.out.println(t.getPriority()+"++++++++++1111");
		//啟動執行緒
		t.start();
		//執行緒啟動後再次檢視執行緒的優先順序值
		System.out.println(t.getPriority()+"++++++++++2222");
		System.out.println(t.getPriority()+"++++++++++2222");
		//執行緒啟動後設置執行緒的優先順序值為8
		t.setPriority(8);
		System.out.println(t.getPriority()+"----------");
		System.out.println(t.getPriority()+"----------");
		//執行緒休息5s後重新設定執行緒優先順序並檢視優先順序值
		try {
			Thread.currentThread().sleep(5000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		t.setPriority(6);
		System.out.println(t.getPriority()+"**********");
		System.out.println(t.getPriority()+"**********");
	}
}

輸出結果為:
5++++++++++
5++++++++++
7++++++++++1111
7++++++++++1111
7++++++++++2222
7++++++++++2222
8----------
8----------
6**********
6**********

正好驗證了:java執行緒在建立後任何時候都可以重新設定優先順序