守護線程的說明
Java線程可以被標記為守護線程(daemon)。守護線程與非守護線程的區別主要是它們對於Java程序退出的影響。Java程序在以下幾種情況下會退出:
Runtime.exit方法被調用
所有非守護線程已經結束,即使這時候還存在守護線程,Java程序也會退出
創建線程的時候,如果其父線程是守護線程,則它自動成為守護線程。如果其父線程不是守護線程,那麼可以在啟動該線程之前調用setDaemon設置該線程為守護線程。要註意必須在啟動之前調用,否則會拋出異常:
Java代碼
if (isAlive()) {
throw new IllegalThreadStateException();
}
守護線程的用途
守護線程通常用於執行一些後臺作業,例如在你的應用程序運行時播放背景音樂,在文字編輯器裡做自動語法檢查、自動保存等功能。Java的垃圾回收也是一個守護線程。守護線程的好處就是你不需要關心它的結束問題。例如你在你的應用程序運行的時候希望播放背景音樂,如果將這個播放背景音樂的線程設定為非守護線程,那麼在用戶請求退出的時候,你不僅要退出主線程,還要通知播放背景音樂的線程退出;如果設定為守護線程則不需要瞭。
以下內容來自於: oreilly.com — Exploring Java: Threads
Daemon threads are primarily useful in standalone Java applications and in the implementation of the Java system itself, but not in applets. Since an applet runs inside of another Java application, any daemon threads it creates will continue to live until the controlling application exits–probably not the desired effect.
翻譯如下: 守護線程主要用於獨立的Java應用程序和Java系統本身的實現。applet不需要使用守護線程,因為applet本身是在另一個Java應用程序裡運行的,任何守護線程都會始終存活,直到控制程序退出,控制程序退出的時候,無論你創建的是守護線程還是非守護線程都會自動退出,這並不是使用守護線程想要的效果,或者說,不使用守護線程也能達到同樣的效果。
作者“寂靜湖畔”