Java併發(十)----線程之守護線程

默認情況下,Java 進程需要等待所有線程都運行結束,纔會結束。有一種特殊的線程叫做守護線程,只要其它非守護線程運行結束了,即使守護線程的代碼沒有執行完,也會強制結束。

例:

log.debug("開始運行...");
Thread t1 = new Thread(() -> {
    log.debug("開始運行...");
    sleep(2);
    log.debug("運行結束...");
}, "daemon");
// 設置該線程爲守護線程
t1.setDaemon(true);
t1.start();
​
sleep(1);
log.debug("運行結束...");

輸出

08:26:38.123 [main] c.TestDaemon - 開始運行...
08:26:38.213 [daemon] c.TestDaemon - 開始運行...
08:26:39.215 [main] c.TestDaemon - 運行結束...

注意

  • 垃圾回收器線程就是一種守護線程

  • Tomcat 中的 Acceptor 和 Poller 線程都是守護線程,所以 Tomcat 接收到 shutdown 命令後,不會等待它們處理完當前請求

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章