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(50);
					} 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()+"----------");
		//當前main線程休息10s后重新設置t線程優先級並查看優先級值
		try {
			Thread.currentThread().sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//此時線程已經終止
		t.setPriority(6);
		System.out.println(t.getState());
		System.out.println(t.getPriority()+"**********");
		System.out.println(t.getPriority()+"**********");
	}
}

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

正好驗證了:java線程在創建后任何時候(線程終止前)都可以重新設置優先級


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM