2014年4月9日 星期三

執行緒 Thread:Daemon 執行緒

一個 Daemon 執行緒是一個在背景 background 執行服務的執行緒。

檔案:ThreadDaemon1.java
public class ThreadDaemon1 {

 public static void main(String[] args) {
  Thread thread = new Thread(
        new Runnable(){
           public void run(){
          while (true){
          System.out.print("*");
          }
           }
        }
    
    );
  
  thread.start();
 }

}
在命令列視窗中,以 java ThreadDaemon1 驗證,執行結果













此時命令式窗不斷顯示 * 字元,而須以 Control + C 鍵強迫中止程式。

照道理,main()這個非 Daemon 的執行緒結束後,其所產生的 Daemon 執行緒 thread 也應該要結束才對,但,此時 thread 這個在背景執行的執行緒卻無法終止,問題在那裡?

問題在:若由非Daemon執行緒而產生的 Daemon 執行緒,此 Daemon 要以呼叫 setDaemon(true) 的方式,這樣非Daemon執行緒結束時,其所產生的 Daemon 執行緒也會跟著結束。

由 Daemon 執行緒所產生的執行緒,也屬於 Daemon 執行緒,所以也要用 setDaemon(true) 的方式設定。

public class ThreadDaemon1 {

 public static void main(String[] args) {
  Thread thread = new Thread(
        new Runnable(){
           public void run(){
          while (true){
          System.out.print("*");
          }
           }
        }
    
    );
  thread.setDaemon(true);
  thread.start();
 }

}

沒有留言:

張貼留言