1、简介
Daemon线程是一种支持类型的线程,因为它主要被用作程序中后台调度以及支持性工作,这意味着,当一个java虚拟机中不存在非Daemon线程的时候,JAVA虚拟机将会退出,可以通过调用Thread.setDaemon(true)将线程设置为Daemon线程
注意:Daemon属性需要在启动线程之前设置,不能再线程启动之后设置
2、使用
Daemon线程被用作完成支持性工作,但是在java虚拟机退出时Daemon线程中的finally快并不会执行
package cn.sunline.demo.demo4;
public class Daemon {
public static void main(String[] args) {
Thread thread = new Thread(new DeamonRunner(),"DeamonRunner");
thread.setDaemon(true);
thread.start();
}
static class DeamonRunner implements Runnable{
@Override
public void run() {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
System.out.println("finally run");
}
}
}
}
3、结果
运行daemon程序,没有输出任何东西,main线程(非Daemon线程)在启动线程DeamonRunner 之后随着main方法执行完毕而终止,而此时的java虚拟机中已经没有非Daemon线程,虚拟机需要退出,java虚拟机中所有的Daemon线程都需要立即终止,因此DeamonRunner立即终止,所以没有执行finally里面的内容
注意:在构建Daemon线程是,不能依靠finally块中的内容来确保执行关闭或者清理资源的逻辑