ExecutorService 与守护线程 - 显式关闭

Lpp*_*Edd 5 java executorservice

如果我设置了一个ExecutorService产生ThreadFactory守护线程的 a ,我还需要显式调用该shutdown()方法吗?

Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setDaemon(true).build());
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 2

嗯,根据setDaemon

当唯一运行的线程都是守护线程时,Java 虚拟机退出。

因此,因为您使用的是守护线程,所以执行程序不会阻止您的应用程序完成。但这并不是说没有理由打电话shutdown。您可能仍希望阻止在申请结束之前的某个时间提交任何其他任务。


喜欢的话测试一下:(我把Guava的东西去掉了,但是原理是一样的)

public static void main(String... args)
{
    final ExecutorService executorService = Executors.newSingleThreadExecutor(r -> {
        final Thread thread = new Thread(r);
        thread.setDaemon(false); //change me
        return thread;
    });
    executorService.submit(() -> { while (true){ System.out.println("busy"); } });
}
Run Code Online (Sandbox Code Playgroud)