具有守护程序线程的ExecutorService - 显式关闭

时间:2018-05-11 16:05:36

标签: java executorservice

如果我设置ExecutorServiceThreadFactory生成守护程序线程,是否仍需要显式调用shutdown()方法?

Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setDaemon(true).build());

1 个答案:

答案 0 :(得分:1)

好吧,as per setDaemon

  

当所有运行的线程全部退出时,Java虚拟机将退出   守护线程。

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

如果您愿意,请测试它:(我删除了番石榴的东西,但校长是相同的)

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"); } });
}