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块中的内容确保执行关闭或者清理资源的逻辑。线程

相关文章
相关标签/搜索