ExecutorService有一个方法
List<Runnable> shutdownNow()
其中
返回正在等待执行的任务的列表。
但是,ForkJoinPool始终返回Collection.emptyList()。从那以后,ForkJoinPool的实现
试图取消和/或停止所有任务,并拒绝所有随后提交的任务,
是否还应该返回已取消的任务列表?
答案 0 :(得分:3)
为什么要清空列表?
该文档说明(强调是我的):
此方法同时取消现有和未执行的任务, 允许在存在任务依赖项的情况下终止。所以方法 总是返回一个空列表(与其他情况不同) 执行者)。
为什么?
因为ForkJoinPool
是ExecutorService
的“特殊”实现。
它可能具有与执行的fork相关的某些任务依赖性。
例如,在下面的示例中,如果已停止提交的任务,您还希望子任务1和子任务2也终止:
因此,当您停止ForkJoinPool
实例的任务时,将返回一个List
,指示不再等待其他任务。这样,所有等待其他任务终止或当前正在处理的任务也将根据需要终止。
虽然我不确定该方法的返回值(我尚未找到有关此方法的线索)用于当前的实现。