守护线程

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

 

posted @ 2022-02-22 18:46  变体精灵  阅读(196)  评论(0编辑  收藏  举报