Daemon线程
在java虚拟机退出时finally块并不一定会执行
代码
package myTestDeadlock;
public class Daemon {
/**
* @Title: main
* @Description: Daemon是一种支持型线程,因为它主要被用作程序中后台调度以及支持性工作
* 这意味着当一个java虚拟机中不存在非Daemon线程的时候,java虚拟机将会退出,可以通过调用Thread.setDaemon(true)设置为Daemon线程
* @param @param args 设定文件
* @return void 返回类型
* @throws
*/
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 {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
System.out.println("DaemonThread finally run().");
}
}
}
}
java虚拟机中没有非Daemon线程虚拟机需要退出,虚拟机中的所有Daemon线程都需要立即终止,因此DaemonRunner立即中止,但是finally块并没有被执行
注意:在构建Daemon线程时,不能依靠finally块中的内容来确保执行关闭或清理资源的逻辑