默认情况下,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);