1. 程式人生 > >Java多執行緒之優先順序setPriority

Java多執行緒之優先順序setPriority

作業系統中,執行緒可以劃分優先順序,優先順序較高的執行緒得到CPU資源較多,也就是CPU優先執行優先順序較高的執行緒物件中的任務(其實並不是這樣)。

Java中,執行緒的優先順序用setPriority()方法就行,執行緒的優先順序分為1-10這10個等級,如果小於1或大於10,則丟擲異常throw new IllegalArgumentException(),預設是5。

  1. publicclass MyThread1 extends Thread {  
  2.     @Override
  3.     publicvoid run() {  
  4.         long startTime=System.currentTimeMillis();  
  5.         long addResult=0;  
  6.         for (int i = 0; i < 1000000; i++) {  
  7.             new Random().nextInt();  
  8.             addResult+=i;  
  9.         }  
  10.         long endTime=System.currentTimeMillis();  
  11.         System.out.println("thread1 use time--->"+(endTime-startTime));  
  12.     }  
  13. }  
  1. publicclass MyThread2 
    extends Thread {  
  2.     @Override
  3.     publicvoid run() {  
  4.         long startTime=System.currentTimeMillis();  
  5.         long addResult=0;  
  6.         for (int i = 0; i < 1000000; i++) {  
  7.             new Random().nextInt();  
  8.             addResult+=i;  
  9.         }  
  10.         long endTime=System.currentTimeMillis();  
  11.         System.out.println("thread2 use time--->"
    +(endTime-startTime));  
  12.     }  
  13. }  

  1. publicclass MyThread{  
  2.     publicstaticvoid main(String[] args){  
  3.         for (int i = 0; i < 5; i++) {  
  4.             MyThread1 t1=new MyThread1();  
  5.             t1.setPriority(10);  
  6.             t1.start();  
  7.             MyThread2 t2=new MyThread2();  
  8.             t2.setPriority(1);  
  9.             t2.start();  
  10.         }  
  11.     }  
  12. }  



從結果中可以發現,也有thread2比thread1先執行完,也就驗證了執行緒的優先順序於程式碼執行順序無關。

  1. publicclass MyThread{  
  2.     publicstaticvoid main(String[] args){  
  3.         for (int i = 0; i < 5; i++) {  
  4.             MyThread1 t1=new MyThread1();  
  5.             t1.setPriority(6);  
  6.             t1.start();  
  7.             MyThread2 t2=new MyThread2();  
  8.             t2.setPriority(5);  
  9.             t2.start();  
  10.         }  
  11.     }  


如果我們把優先順序設定近點的話,發現優先順序較高的執行緒不一定沒一次都執行完,執行緒的優先順序與列印的順序無關,不要將這兩點的關係相關聯,他們的關係是不確定性和隨機性。

執行緒的優先順序仍然無法保障執行緒的執行次序。只不過,優先順序高的執行緒獲取CPU資源的概率較大,優先順序低的並非沒機會執行。

執行緒的優先順序具有繼承性,比如A執行緒啟動B執行緒,則A和B的執行緒優先順序是一樣的。