我需要做这样的事情:

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 .:完全停止另一个正在进行的任务。

07-24 09:33