執行緒優先順序練習記錄
阿新 • • 發佈:2019-01-22
package cm; public class test20180502Concurrency extends Thread { private int countdown = 5; private static int threadcount = 0; public test20180502Concurrency(int newPriority) { super("" + ++threadcount);//接受一個static引數,設定執行緒名稱 setPriority(newPriority); start();//start方法執行必要的執行緒初始化,並呼叫run方法 } public String toString() { return "#" + getName() + ":" + countdown;//getname是Thread中的一個靜態方法。 } public void run() { // while(true) { // System.out.println(this); // if(--countdown==0) { // return;//跳出迴圈 // } // yield();//給執行緒排程機制一個暗示,表示可以將cpu分配給其他執行緒了,但不一定保證被程式排程器採納。 // try { // sleep(100);//使得執行緒睡眠100毫秒。 // } catch (InterruptedException e) {//丟擲異常的原因是:當對此執行緒具有引用,並在這個引用上呼叫了interrupt()方法,那麼就會丟擲InterruptedException異常。 // e.printStackTrace(); // } // } //修改上面程式版本,為程式新增優先權。使得處於等待狀態的高優先順序執行緒先得到執行。 while(true) { System.out.println(this); if(--countdown==0) { return;//跳出迴圈 } } } public static void main(String[] args) { for(int i=0;i<5;i++) { //測試執行緒優先順序。 if(i<4) { new test20180502Concurrency(Thread.MIN_PRIORITY);//最小優先順序 }else { new test20180502Concurrency(Thread.MAX_PRIORITY);//最大優先順序 } //new test20180502Concurrency();//建立五個執行緒。觀察他們的列印順序,同時執行的。 //這裡並沒有宣告這個例項的引用,但是垃圾回收器不會回收這個物件,因為thread物件需要註冊自己,在某個地方 //有著對這個threead物件的引用。只有執行緒 離開了run方法的時候才會將這個物件清理掉。 } } }