1. 程式人生 > >多執行緒學習筆記(三)--使用者執行緒和守護執行緒

多執行緒學習筆記(三)--使用者執行緒和守護執行緒

闡述

Java執行緒中有兩種執行緒:①使用者執行緒 ②守護執行緒

使用者執行緒:平時用到的普通執行緒均是使用者執行緒

守護執行緒:指在程式執行的時候在後臺提供一種通用服務的執行緒,守護執行緒是為使用者執行緒服務的,當有使用者執行緒在執行,那麼守護執行緒同樣需要工作,當所有的使用者執行緒都結束時,守護執行緒也就會停止

守護執行緒使用方式

  • 設定執行緒的Daemon為true,且必須在thread.start()之前設定
  • Daemon執行緒中產生的新執行緒也是Daemon
  • 守護執行緒不應該去訪問固有資源,如進行讀寫操作(檔案,資料庫),因為守護執行緒是跟隨使用者執行緒的,當沒有使用者執行緒工作時,守護執行緒會立即結束

舉例

  • 沒有守護執行緒時
public class Daemon {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("守護執行緒 執行緒結束...");
            }
        });
//        thread.setDaemon(true);    //①
        thread.start();
        System.out.println("使用者執行緒 結束...");
    }
}

執行結果:

證明當使用者執行緒全部結束時,守護執行緒依舊可以執行


  • 有守護執行緒時
public class Daemon {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("守護執行緒 執行緒結束...");
            }
        });
        thread.setDaemon(true);    //①
        thread.start();
        System.out.println("使用者執行緒 結束...");
    }
}

執行結果:

當所有的使用者執行緒結束時,守護執行緒就結束了,不會繼續執行


守護執行緒適用場景

  • 不適合用於輸入輸出或計算操作
  • 適用於輔助使用者執行緒場景,如GC,記憶體管理