Java前台線程與後台線程
上一篇部落格在main()方法中,建立並啟動了四個新的線程後,main()方法中的代碼執行完畢,此時,方法會結束,main線程也就隨之結束了
通過程式的運行結果可以看出,雖然,main線程結束了,但是整個Java程式卻沒有隨之結束,仍然在執行售票的代碼
對於Java程式來說,只要還有一個前台線程在運行,這個進程就不會結束,如果一個進程中,只有後台線程在運行,這個進程就會結束 前台線程與後台線程
前台線程、後台線程是一種相對的概念
新建立的線程,預設都是前台線程
如果,某個線程對象在啟動之前,調用了setDaemon(true)語句,這個線程就變成了一個後台線程
樣本,Example06.java
// 建立DamonThread類,實現Runnable介面class DamonThread implements Runnable{ // 實現介面中的run()方法 public void run(){ while(true){ System.out.println(Thread.currentThread().getName()+"---is running."); } }}public class Example06{ public static void main(String[] args){ System.out.println("main線程是後台線程嗎。"+Thread.currentThread().isDaemon()); // 建立一個DamonThread對象dt // 建立線程t,共用dt資源 DamonThread dt=new DamonThread(); Thread t=new Thread(dt,"後台線程"); System.out.println("t線程預設是後台線程嗎。"+t.isDaemon()); // 將線程t,設定為後台線程 // 調用start()方法,開啟線程t t.setDaemon(true); t.start(); for(int i=0;i<10;i++){ System.out.println(i); } }}
編譯運行
示範了一個後台線程結束的過程
當開啟線程t之後,會執行死迴圈中的列印語句,我們將線程t設定為後台線程後,當前台線程死亡後,JVM會通知後台線程
由於,後台線程從接受指令,到做出響應,需要一定的時間,因此,列印了幾次後台線程—is running語句後,後台線程也結束了
因此,說明後台線程在運行時,進程就結束了 設定後台線程
將某個線程設定為後台線程,必須在該線程啟動之前
也就是說,setDaemon()方法必須在start()方法之前調用,否則,會引發IllegalTreadStateException異常