我需要做这样的事情:
ExecutorService executor = Executors.newFixedThreadPool(2);
CompletionService<Boolean> completionService = new ExecutorCompletionService<>(executor);
int i = 0;
while (i < 40) {
completionService.submit(getTask());
i++;
}
executor.shutdown();
System.out.println("SHUTDOWN");
但是在
shutdown
对象executor
上调用completionService
之后,仍然执行任务。我怎样才能阻止它?
有什么办法可以停止ExecutorService,但要等待当前执行的任务完成?
最佳答案
ExecutorService
将继续执行已经提交的任务,但不允许从documentation提交其他任务
启动有序关闭,在该关闭中执行先前提交的任务,但不接受任何新任务。如果已关闭,则调用不会产生任何其他影响。
重点矿
因此,您已经提交了40个任务,这些任务将在关机之前执行。
如果要强制关机。您可以使用shutdownNow
:
尝试停止所有正在执行的任务,暂停正在等待的任务的处理,并返回正在等待执行的任务的列表。
重点矿
您可以根据需要放弃预定的任务。
N.B .:完全停止另一个正在进行的任务。