在Java面试中守护线程只需要了解相关概念即可。

概念

守护线程是后台线程,用来服务用户的线程,守护线程的典型例子是垃圾回收器GC或者监视资源动态。

开启守护线程

在Java中守护线程开启十分简单只需要使用方法setDaemon(true) 即可。

开启守护线程的例子

public class DaemonThread1{

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            System.out.println("before");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("after");
        });
        t.setDaemon(true);//开启守护线程
        t.start();

        Thread.sleep(1000);
        System.out.println("exit");
    }
}

输出

before
exit

 非守护线程的例子

public class DaemonThread2 {

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            System.out.println("before");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("after");
        });
        t.setDaemon(false);//关闭守护线程
        t.start();

        Thread.sleep(1000);
        System.out.println("exit");
    }
}
输出
before
exit
after

 从上面的2个例子中我们不难发现,守护线程结束,子线程也随之结束。