JUC学习-14-守护线程(垃圾回收器)
JUC学习-14-守护线程(垃圾回收器)
将此线程标记为守护线程或者用户线程
setDaemon(boolean on)
默认情况下我们创建的宪曾都是用户线程(普通线程),进程需要等待所有的线程执行完毕后,进程才会结束。
守护线程 setDaemon(true) 设置守护线程
想要查看线程到底是用户线程还是守护线程,可以通过Thread.isDaemon()方法来判断,如果返回的结果是true,则为守护线程,反之则为用户线程。
当所有的用户线程退出后,守护线程会立马结束。
应用:
-
垃圾回收期线程属于守护线程
-
tomcat用来接受处理外部的请求的线程就是守护线程。
代码:
class TestDaemon {
public static void main(String[] args) {
Thread t = new Thread (() -> {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("子线程结束");
});
t.start();
System.out.println("主线程结束");
}
}
结果如下:
因为子线线程执行了sleep()操作,所以在主线程执行完毕以后,子线程才执行完并打印相关信息。
将子线程设置为守护线程
class TestDaemon {
public static void main(String[] args) {
Thread t = new Thread (() -> {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("子线程结束");
});
// 设置子线程为守护线程
t.setDaemon(true);
t.start();
System.out.println("主线程结束");
}
}
结果如下:
因为子线程被设置成了"守护线程",所以在主线程执行完毕以后守护线程立即结束了,没有打印相关信息
本文来自博客园,作者:skystrivegao,转载请注明原文链接:https://www.cnblogs.com/skystrive/p/18976167
整理不易,如果对您有所帮助 请点赞收藏,谢谢~