美文网首页
Java守护线程

Java守护线程

作者: 游杜渐 | 来源:发表于2020-06-02 10:58 被阅读0次

    什么是守护线程

    Java中的线程分为两类:用户线程(User Thread)、守护线程(Daemon Thread),守护线程有点类比于操作系统层面的守护进程 ,而操作系统层面本身是没有守护线程的定义的,这个是JVM定义出来的。守护线程是守护JVM中的其他线程,所以当如果其他线程不存在时,守护线程也会随之停止,意在伴随着JVM的关闭也销毁,比如常说的GC线程。

    看一个简单的例子

    public class Main {
        public static void main(String[] args) {
            //守护线程
            Thread daemonThread = new Thread(() -> {
                for (int i = 0; i < 10; i++) {
                    System.out.println("daemon thread:" + i);
                    sleep();
                }
            });
            daemonThread.setDaemon(true);
            daemonThread.start();
            //用户线程
            new Thread(() -> {
                for (int i = 0; i < 5; i++) {
                    System.out.println("common thread:" + i);
                    sleep();
                }
            }).start();
            //主线程
            for (int i = 0; i < 2; i++) {
                System.out.println("main thread:" + i);
                sleep();
            }
        }
    
        private static void sleep() {
            try {
                Thread.sleep(100L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    执行结果

    daemon thread:0
    main thread:0
    common thread:0
    main thread:1
    daemon thread:1
    common thread:1
    common thread:2
    daemon thread:2
    daemon thread:3
    common thread:3
    common thread:4
    daemon thread:4
    

    1)主线程执行完了,普通子线程仍然在执行

    2)普通子线程执行完了,守护线程也相继停止了

    3)JVM退出不会Care守护线程是否接受

    基本特性

    1)所有用户线程结束后,JVM直接关闭,不会等待守护线程

    2)setDaemon() 必须在start()方法前调用,否者会报错

    3)线程的daemon 属性默认继承于父线程,即守护线程创建出来的线程也是守护线程

    4)和线程本身优先级没有关系,线程prioritydaemon是两个独立的特性(看官方文档没有指出之间有什么联系

    使用场景

    后台线程一般用于执行一些辅助型的后台任务:

    • 典型的Java GC线程
    • 手机系统监控信息
    • 监听网络请求或者异步任务

    参考

    JVM安全退出机制

    什么是守护进程

    Java的守护进程和非守护进程

    daemon-thread-use-case

    相关文章

      网友评论

          本文标题:Java守护线程

          本文链接:https://www.haomeiwen.com/subject/ilzyzhtx.html