在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
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
exit
after
从上面的2个例子中我们不难发现,守护线程结束,子线程也随之结束。