“這是一個有趣的新話題。”

“事實證明你可以以不同的模式啟動線程。”

“當主線程完成其工作時,一個標準程序(只有一個線程)停止運行。主線程完成執行,程序終止,JVM 釋放內存。”

“如果我們啟動一個子線程,即使主線程結束,程序也會繼續運行。只要至少有一個正在運行的線程,JVM 就不會終止。一旦所有正在運行的線程都完成,程序就會關閉。”

“嗯,大型程序通常有所謂的‘服務線程’,它們的工作是為程序的其他部分提供服務。它們本身並不是必需的。例如:刪除未使用的對象(垃圾收集)、內存轉儲和錯誤日誌記錄、關於當前程序狀態的各種報告等等。”

“程序運行時需要這些服務線程,但它們自己不需要。”

“是的,我明白這一點。”

“Java 允許您將線程作為守護進程運行。此類線程的功能與其他線程相同,但如果程序中的所有非守護線程都已終止並且只剩下守護線程,則 JVM 將關閉該程序。”

“所以聲明一個'服務'線程只是意味著程序終止時不考慮它。就這樣嗎?”

“嗯嗯……嗯,你說的真是簡短而甜蜜。本質上,這就是我想告訴你的。”

“簡潔是一種天賦。有天賦的機器人在任何方面都是有天賦的。”

“任何問題?”

“如何將線程作為守護進程啟動?從某個 DaemonThread 類繼承?”

“不,它比那簡單得多。Thread 類有一個 setDaemon(boolean) 方法。你只需要傳入 true 就可以了。你只需要在調用 start() 方法之前調用它,在真正的線程之前已創建。在線程開始運行後,您無法更改線程的類型。”

例子:
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();

“就這樣嗎?”

“是的。”

“我想再次提請您注意創建和啟動線程的過程。”

“創建 Thread 對像不會創建線程。Thread 對像不是線程。JVM 在調用 start() 方法時創建線程。Thread 是一種特殊的 JVM 對象,它允許您訪問有關線程的信息並提供你對它有一點控制權。”

“我明白了。謝謝,艾莉。”