java多线程并发--守护线程和用户线程

守护线程(daemon) 是指程序运行时,后台提供的一种通用服务的线程,并且这种线程不是不可或缺的。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中所有的守护线程。反之,只要有任何用户线程还在运行,程序就不会终止。

线程只有守护线程时,系统会终止,同时会杀死进程中的所有守护线程

// An highlighted block
	public static class Threaddemo1 extends Thread{
        public Threaddemo1(String name) {
            super(name);
        }
        @Override
        public void run(){
            System.out.println(this.getName() + "开始执行," + (this.isDaemon() ? "我是守护线程" : "我是用户线程"));
            while (true) {
                ;
            }
        }
    }
    public static void main(String[] args) {
        Threaddemo1 threaddemo1=new Threaddemo1("子线程");
        //设置用户线程为守护线程,不设置时,程序无法结束
        //threaddemo1.setDaemon(true);
        threaddemo1.start();
        System.out.println("主线程结束");
    }

运行结果如下:(程序无法终止)
java多线程并发--守护线程和用户线程_第1张图片

// An highlighted block
	public static class Threaddemo1 extends Thread{
        public Threaddemo1(String name) {
            super(name);
        }
        @Override
        public void run(){
            System.out.println(this.getName() + "开始执行," + (this.isDaemon() ? "我是守护线程" : "我是用户线程"));
            while (true) {
                ;
            }
        }
    }
    public static void main(String[] args) {
        Threaddemo1 threaddemo1=new Threaddemo1("子线程");
        //设置用户线程为守护线程,不设置时,程序无法结束
        threaddemo1.setDaemon(true);
        threaddemo1.start();
        System.out.println("主线程结束");
    }

运行结果如下:
java多线程并发--守护线程和用户线程_第2张图片
注:必须在线程启动之前调用setDaemon()方法,才能设置为守护线程。

守护线程创建的任何线程都将被自动设置为守护线程

通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说 JVM 退出时,线程能够自动关闭,此时,守护线程是你的首选。

你可能感兴趣的:(JAVA多线程)