如果我设置ExecutorService
并ThreadFactory
生成守护程序线程,是否仍需要显式调用shutdown()
方法?
Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setDaemon(true).build());
答案 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"); } });
}