为什么ForkJoinPool :: shutdownNow返回一个空列表?

问题描述 投票:1回答:1

ExecutorService有一个方法

List<Runnable> shutdownNow()

哪一个

返回等待执行的任务列表。

但是,ForkJoinPool始终返回Collection.emptyList()。自从,ForkJoinPool的实施

尝试取消和/或删除所有任务,并拒绝所有后续提交的任务,

它不应该还返回被取消的任务列表吗?

java java-8 executorservice
1个回答
3
投票

为什么一个空列表? 该文件解释说(重点是我的):

此方法取消现有和未执行的任务,以便在存在任务依赖性时允许终止。因此该方法总是返回一个空列表(与其他一些Executors的情况不同)。

为什么?

因为ForkJoinPoolExecutorService的“特殊”实现。 它可能具有与执行的叉相关的一些任务依赖性。 例如,在下面的示例中,如果提交的任务已停止,您还希望子任务1和子任务2也被终止:

simple example of fork join 这就是为什么当你停止ForkJoinPool实例的任务时,你将返回一个List,表示不再等待任务。通过这种方式,任何等待其他任务终止或当前处理的任务也将被终止,因为不再需要。 虽然我不确定该方法的返回(我没有找到关于它的线索)可用于当前的实现。

© www.soinside.com 2019 - 2024. All rights reserved.