多執行緒學習筆記(三)--使用者執行緒和守護執行緒
阿新 • • 發佈:2019-02-14
闡述
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,記憶體管理