標籤:java 多線程 線程 線程優先順序
在作業系統中,線程可以劃分優先順序,優先順序較高的線程得到CPU資源較多,也就是CPU優先執行優先順序較高的線程對象中的任務(其實並不是這樣)。
在java中,線程的優先順序用setPriority()方法就行,線程的優先順序分為1-10這10個等級,如果小於1或大於10,則拋出異常throw new IllegalArgumentException(),預設是5。
public class MyThread1 extends Thread {@Overridepublic void run() {long startTime=System.currentTimeMillis();long addResult=0;for (int i = 0; i < 1000000; i++) {new Random().nextInt();addResult+=i;}long endTime=System.currentTimeMillis();System.out.println("thread1 use time--->"+(endTime-startTime));}}
public class MyThread2 extends Thread {@Overridepublic void run() {long startTime=System.currentTimeMillis();long addResult=0;for (int i = 0; i < 1000000; i++) {new Random().nextInt();addResult+=i;}long endTime=System.currentTimeMillis();System.out.println("thread2 use time--->"+(endTime-startTime));}}
public class MyThread{public static void main(String[] args){for (int i = 0; i < 5; i++) {MyThread1 t1=new MyThread1();t1.setPriority(10);t1.start();MyThread2 t2=new MyThread2();t2.setPriority(1);t2.start();}}}
從結果中可以發現,也有thread2比thread1先執行完,也就驗證了線程的優先順序於代碼執行順序無關。
public class MyThread{public static void main(String[] args){for (int i = 0; i < 5; i++) {MyThread1 t1=new MyThread1();t1.setPriority(6);t1.start();MyThread2 t2=new MyThread2();t2.setPriority(5);t2.start();}}
如果我們把優先順序設定近點的話,發現優先順序較高的線程不一定沒一次都執行完,線程的優先順序與列印的順序無關,不要將這兩點的關係相關聯,他們的關係是不確定性和隨機性。
線程的優先順序仍然無法保障線程的執行次序。只不過,優先順序高的線程擷取CPU資源的機率較大,優先順序低的並非沒機會執行。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
java多線程之線程的優先順序