java daemon

作者:原创时间:2022-03-29
文档

java daemon是什么,让我们一起了解一下。

daemon线程是为我们创建的用户线程提供服务的线程,比如说jvm的GC等等。这样的线程有一个非常明显的特征,当用户线程运行结束的时候,daemon线程将会自动退出。

daemon线程的特点是什么?

1、daemon线程创建的过程中需要先调用setDaemon方法进行设置,然后再启动线程,否则会报出IllegalThreadStateException异常。

2、由于daemon线程的终止条件是当前是否存在用户线程,所以我们不能指派daemon线程来进行一些业务操作,而只能服务用户线程。

3、daemon线程创建的子线程任然是daemon线程。

那么Daemon线程与非Daemon线程有什么区别?

基本上没有什么区别,不同之处就是当 java虚拟机中所有的非Daemon线程都停止运行之后,即使还存在有Daemon线程,java虚拟机也会退出。这是因为Daemon线程没有了被守护者,所以其也就没有继续运行的必要了。

Daemon线程可以通过调用Thread.setDaemon(true)设置,但是该方法的调用必须是在线程启动之前设置,否则将会抛出一个IllegalThreadStateException异常,这是因为一个正在运行中的线程是不能被设置成守护线程的。

Daemon线程被用作完成支持性的工作,但是在java虚拟机退出的时候Daemon线程中的finally代码块并不一定执行。

代码示例:

public class TestDaemonThread {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    SleepUtils.second(1);
                }finally {
                    System.out.println("DaemonThread finally run.");
                }
                System.out.println();
            }
        }, "DaemonThread");
        //在线程执行前设置为daemon线程
        thread.setDaemon(true);
        thread.start();
    }
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java获取随机数 java dashboard java获得当前路径 java表单校验 java dataframe java规则引擎 java dataset java读取json java读取本地excel java decaf java调python java decode java decodeuri java delegate java调用c++接口 java调用c++ java获取绝对值 java delete java调用asmx接口 java dependency java获取随机字符串 java ctp java获取运行时间 java cssbox java获取路径 java获取请求域名 java csrf java获取视频时长 java crontab java获取网络时间 java crash java获取秒级时间戳 java core java获取泛型class java corba java cookie java获取本地ip java controller java获取本周日期 java context