Java并发编程-主线程与守护线程
目录名称
主线程与守护线程
默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。
有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。
public class Test02 {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("守护中.....");
if (Thread.currentThread().isInterrupted()) {
break;
}
}
System.out.println("结束");
}, "t1");
//把t1设置为守护线程
t1.setDaemon(true);
t1.start();
Thread.sleep(4000);
//主线程结束(非守护线程),此时无论守护线程的代码有没有走完,强制结束
System.out.println("结束");
}
}
控制台输出
守护中.....
守护中.....
守护中.....
守护中.....
守护中.....
守护中.....
守护中.....
结束
垃圾回收器线程就是一种守护线程(堆内存中的对象如果长时间得不到使用,调用垃圾回收进程(守护进程),如果程序停止,垃圾回收就会强制停止)
Tomcat 中的 Acceptor 和 Poller 线程都是守护线程,所以 Tomcat 接收到 shutdown 命令后,不会等待它们处理完当前请求