默认情况下,Java 进程需要等待所有的线程都运行完毕,才会结束,但是有一种特殊的线程叫做守护线程,当其它非守护线程运行完毕之后,它才会结束,即使守护线程有代码没有执行完,也会强制结束
示例一
@Slf4j
public class ThreadDemo {
public static void main(String[] args) throws InterruptedException {
Runnable runnable = () -> {
while (true) {
if (Thread.currentThread().isInterrupted()) {
log.info("守护线程处理任务...");
break;
}
}
log.info("守护线程处理任务结束...");
};
Thread t1 = new Thread(runnable, "t1");
// 将线程设置为守护线程,默认为 false(非守护线程)
//t1.setDaemon(true);
t1.start();
log.info("main start...");
Thread.sleep(5 * 1000);
log.info("main end...");
}
}
运行结果:所有的线程默认都是非守护线程,main 线程运行完毕之后,t1 线程还没有结束,一直在执行 while(true) 循环
示例二
将 t1 线程设置为守护线程,5 s 休眠时间结束后,守护线程也随着 main 线程的停止而终止了
// 在 start 方法调用之前设置
t1.setDaemon(true);