線程的優先級只要知道就可以了,用默認的5級就足夠。
千萬不要改變線程的優先級,否則若是虛擬機中垃圾回收機制被餓死了不能執行,導致虛擬機內存耗盡崩潰。
任意一個項目
main方法:
public class Main { /** * @param args */ public static void main(String[] args) { Thread1 t1 = new Thread1("小黑線程-最低優先級"); Thread2 t2 = new Thread2("小紅線程-最高優先級"); // 改變線程的優先級 // 線程的優先級只要知道就可以了,用默認的5級就足夠,千萬不要改變線程的優先級 t1.setPRiority(Thread.MIN_PRIORITY); t2.setPriority(10); t1.start(); t2.start(); }}線程1:public class Thread1 extends Thread { public Thread1(String name) { super(name); } // 我們把線程要執行的操作寫在run方法中 // run()方法又被稱為線程體 // 取得優先級并顯示 // 優先級越高被線程調度器選中執行的機會越高 public void run() { for (int i = 1; i <= 100000; i++) { System.out.println(this.getName() + "在計數:i=" + i + ",線程的優先級是" + this.getPriority()); } }}線程2:
public class Thread2 extends Thread { public Thread2(String name) { super(name); } // 我們把線程要執行的操作寫在run方法中 // run()方法又被稱為線程體 public void run() { for (int i = 1; i <= 100000; i++) { System.out.println(this.getName() + "在計數:i=" + i + ",線程的優先級是" + this.getPriority()); } }}上面代碼可以執行測試改變線程的優先級。Thread.yield();//注意:線程的sleep()/yield()方法都是靜態方法.靜態方法調用的時候和對象無關
暫停當前正在執行的線程.該線程重新回到了就緒隊列,又有可能被線程調度器重新選中。即使這樣的話,相對于其他的線程來說,也是讓其他的線程更多的獲得了運行機會。
任意一個項目
main方法:
public class Main { /** * @param args */ public static void main(String[] args) { Thread1 t1 = new Thread1("小黑線程-最低優先級"); Thread2 t2 = new Thread2("小紅線程-最高優先級"); // 改變線程的優先級 // 線程的優先級只要知道就可以了,用默認的5級就足夠,千萬不要改變線程的優先級 t1.setPriority(Thread.MIN_PRIORITY); t2.setPriority(10); t1.start(); t2.start(); }}線程1:public class Thread1 extends Thread { public Thread1(String name) { super(name); } // 我們把線程要執行的操作寫在run方法中 // run()方法又被稱為線程體 // 取得優先級并顯示 // 優先級越高被線程調度器選中執行的機會越高 public void run() { for (int i = 1; i <= 100000; i++) { System.out.println(this.getName() + "在計數:i=" + i + ",線程的優先級是" + this.getPriority()); } }}線程2:
public class Thread2 extends Thread { public Thread2(String name) { super(name); } // 我們把線程要執行的操作寫在run方法中 // run()方法又被稱為線程體 public void run() { for (int i = 1; i <= 100000; i++) { System.err.println(this.getName() + "在計數:i=" + i + ",線程的優先級是" + this.getPriority()); // ===================================================== // 注意:線程的sleep()/yield()方法都是靜態方法.靜態方法調用的時候和對象無關 // 暫停當前正在執行的線程.該線程重新回到了就緒隊列,又有可能被線程調度器重新選中 // 即使這樣的話,相對于其他的線程來說,也是讓其他的線程更多的獲得了運行機會 Thread.yield(); } }}上面代碼可以執行測試Thread.yield();讓其他的線程更多的獲得了運行機會。Thread.sleep(5000);// 在哪個線程中調用類線程的sleep(),哪個線程就會睡覺任意一個項目
main方法:
public class Main { /** * @param args */ public static void main(String[] args) { Thread1 t1 = new Thread1("小黑線程-最低優先級"); Thread2 t2 = new Thread2("小紅線程-最高優先級"); try { // 注意:線程的sleep()/yield()方法都是靜態方法.靜態方法調用的時候和對象無關 // 在哪個線程中調用類線程的sleep(),哪個線程就會睡覺 // 下面的代碼是在主線程中調用了線程的sleep(),則主線程睡覺 t1.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } // 改變線程的優先級 // 線程的優先級只要知道就可以了,用默認的5級就足夠,千萬不要改變線程的優先級 t1.setPriority(Thread.MIN_PRIORITY); t2.setPriority(10); t1.start(); t2.start(); }}線程1:public class Thread1 extends Thread { public Thread1(String name) { super(name); } // 我們把線程要執行的操作寫在run方法中 // run()方法又被稱為線程體 // 取得優先級并顯示 // 優先級越高被線程調度器選中執行的機會越高 public void run() { for (int i = 1; i <= 100000; i++) { System.out.println(this.getName() + "在計數:i=" + i + ",線程的優先級是" + this.getPriority()); } }}線程2:
public class Thread2 extends Thread { public Thread2(String name) { super(name); } // 我們把線程要執行的操作寫在run方法中 // run()方法又被稱為線程體 public void run() { for (int i = 1; i <= 100000; i++) { System.err.println(this.getName() + "在計數:i=" + i + ",線程的優先級是" + this.getPriority()); // ===================================================== // 注意:線程的sleep()/yield()方法都是靜態方法.靜態方法調用的時候和對象無關 // 在哪個線程中調用類線程的sleep(),哪個線程就會睡覺 try { // 線程在睡覺期間不會回到就緒隊列.該線程睡醒之后,才會重新回到就緒隊列 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }}上面代碼可以執行測試Thread.sleep(5000);// 在哪個線程中調用類線程的sleep(),哪個線程就會睡覺。
希望對你有幫助,祝你有一個好心情,加油!
若有錯誤、不全、可優化的點,歡迎糾正與補充;轉載請注明出處!
新聞熱點
疑難解答