答案: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()+"----------");
//執行緒休息10s后重新設定執行緒優先級并查看優先級值
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執行緒在創建后任何時候(執行緒終止前)都可以重新設定優先級
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295985.html
標籤:Java
下一篇:訊息中間件RabbitMQ
