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 命令后,不会等待它们处理完当前请求

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务