特殊的Daemon线程

来源:互联网 发布:申请哥伦比亚大学知乎 编辑:程序博客网 时间:2024/06/05 16:00

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{@Overridepublic 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块中的内容来确保执行关闭或清理资源的逻辑



原创粉丝点击