Java執行緒的優先順序在什麼時候可以重新設定?
阿新 • • 發佈:2021-08-31
答案: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**********