Daemon線程--《Java併發編程的藝術》學習筆記

daemon線程即守護線程

當一個JVM中不存在非Daemon線程時,JVM將會退出

也就是說當非Daemon線程都執行完畢時,java程序也就結束了。java

能夠經過調用Thread.setDaemon(true)將線程設置爲Daemon線程。並且必須在線程啓動以前進行設置

Daemon屬性須要在線程啓動以前設置,也就是線程執行start()方法以前設置。不能在線程啓動以後設置,那樣作是無效的。ide

示例代碼

源碼

import java.util.concurrent.TimeUnit;

public class DaemonTest {
    public static void main(String[] args) {
        Thread thread = new Thread(new DaemonRunner(),"DaemonRunner");
        thread.setDaemon(true);
        thread.start();
    }

    static class DaemonRunner implements Runnable{
        @Override
        public void run() {
            try{
                TimeUnit.SECONDS.sleep(10);
            }catch (InterruptedException e){
                System.out.println("Setp into InterruptedException.");
            } finally {
                System.out.println("DaemonThread finally run.");
            }
        }
    }
}

分析:運行代碼控制檯輸出爲空,爲什麼?

程序運行,main線程中啓動了Daemon線程,而後main線程立刻就結束了,此時JVM中已經沒有非Daemon線程了,因此JVM退出了。JVM中的全部Daemon線程也都須要當即終止,即便finally塊中的內容尚未打印,DaemonRunner線程也終止了。spa

構建Daemon線程時,不能依靠finally塊中的內容確保執行關閉或者清理資源的邏輯。線程

相關文章
相關標籤/搜索