ExecutorService有一个方法
List<Runnable> shutdownNow()
哪一个
返回等待执行的任务列表。
但是,ForkJoinPool始终返回Collection.emptyList()。自从,ForkJoinPool的实施
尝试取消和/或删除所有任务,并拒绝所有后续提交的任务,
它不应该还返回被取消的任务列表吗?
为什么一个空列表? 该文件解释说(重点是我的):
此方法取消现有和未执行的任务,以便在存在任务依赖性时允许终止。因此该方法总是返回一个空列表(与其他一些Executors的情况不同)。
为什么?
因为ForkJoinPool
是ExecutorService
的“特殊”实现。
它可能具有与执行的叉相关的一些任务依赖性。
例如,在下面的示例中,如果提交的任务已停止,您还希望子任务1和子任务2也被终止:
这就是为什么当你停止ForkJoinPool
实例的任务时,你将返回一个List
,表示不再等待任务。通过这种方式,任何等待其他任务终止或当前处理的任务也将被终止,因为不再需要。
虽然我不确定该方法的返回(我没有找到关于它的线索)可用于当前的实现。