1、執行緒的優先級
(1)概念
提供一個執行緒調度器來監控程式中啟動后,進入就緒狀態的所有執行緒,執行緒調度器按照優先級決定應調動哪一個執行緒來執行,執行緒的優先級用數字表示,范圍是1~10
(2)程式
public class PriorityTest implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()+"----"+Thread.currentThread().getPriority()); } public static void main(String[] args) { PriorityTest priorityTest=new PriorityTest(); System.out.println(Thread.currentThread().getName()+"----"+Thread.currentThread().getPriority()); Thread thread1=new Thread(priorityTest); Thread thread2=new Thread(priorityTest); Thread thread3=new Thread(priorityTest); Thread thread4=new Thread(priorityTest); thread1.start();//5 thread2.setPriority(1);//1 thread2.start(); thread3.setPriority(4);//4 thread3.start(); thread4.setPriority(Thread.MAX_PRIORITY);//10 thread4.start(); } }
測驗:
main----5 Thread-3----10 Thread-0----5 Thread-2----4 Thread-1----1
執行緒的默認優先級為5,優先級低只是意味著獲得調度的概率低,并不一定是高優先級的先被調度
2、守護執行緒
執行緒分為守護執行緒和用戶執行緒,虛擬機必須確保用戶執行緒執行完畢,不用等待守護執行緒(垃圾回收)執行完畢
(1)定義用戶執行緒:
public class You implements Runnable{ @Override public void run() { for (int i=0;i<36500;i++){ System.out.println("happy every day"); } System.out.println("goodbye world!"); } }
(2)定義守護執行緒:
public class God implements Runnable{ @Override public void run() { while (true){ System.out.println("上帝保佑著你"); } } }
(3)測驗:
public class GodAndYouTest { public static void main(String[] args) { God god=new God(); You you=new You(); Thread thread=new Thread(god); thread.setDaemon(true);//默認是false,表示是用戶執行緒,正常的執行緒都是用戶執行緒 thread.start(); new Thread(you).start();//用戶執行緒啟動 } }
將God執行緒設定為守護執行緒后后啟動,就是將setDaemon設定為false,任何執行緒都可以設定為守護執行緒和用戶執行緒,通過方法 Thread.setDaemon(boolon);true 則把該執行緒設定為守護執行緒,反之則為用戶執行緒,Thread.setDaemon()必須在 Thread.start()之前呼叫,否則運行時會拋出例外,
goodbye world!
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
上帝保佑著你
Process finished with exit code 0
守護執行緒設定的是死回圈,但是該執行緒并沒有一直回圈下去,而是在用戶執行緒停止之后,守護執行緒也就停止了
(4)用戶執行緒與守護執行緒的區別
唯一的區別是判斷虛擬機(JVM)何時離開,守護執行緒是為其他執行緒提供服務,如果全部的用戶執行緒已經撤離,守護執行緒就沒有可服務的執行緒了,JVM 撤離,也可以理解為守護執行緒是 JVM 自動創建的執行緒(但不一定),用戶執行緒是程式創建的執行緒;比如 JVM 的垃圾回收執行緒是一個守護執行緒,當所有執行緒已經撤離,不再產生垃圾,守護執行緒自然就沒事可干了,當垃圾回收執行緒是 Java 虛擬機上僅剩的執行緒時,Java 虛擬機會自動離開,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179250.html
標籤:Java
