为什么 ForkJoinPool::shutdownNow return 是一个空列表?
Why does ForkJoinPool::shutdownNow return an empty list?
ExecutorService 有一个方法
List<Runnable> shutdownNow()
哪个
returns a list of the tasks that were awaiting execution.
但是,ForkJoinPool 总是 returns a Collection.emptyList()。因为,ForkJoinPool 的实现
attempts to cancel and/orstop all tasks, and reject all subsequently submitted tasks,
它不应该也return被取消的任务列表吗?
为什么是空列表?
文档解释说(重点是我的):
This method cancels both existing and unexecuted tasks, in order to
permit termination in the presence of task dependencies. So the method
always returns an empty list (unlike the case for some other
Executors).
为什么?
因为 ForkJoinPool
是 ExecutorService
的 "special" 实现。
它可能有一些与执行的分叉相关的任务依赖性。
例如,在下面的例子中,如果提交的任务被停止,您还希望子任务 1 和子任务 2 也被终止:
这就是为什么当您停止 ForkJoinPool
实例的任务时,您将 return 一个 List
表明没有更多的任务在等待。这样,任何等待其他任务终止或当前正在处理的任务也将终止,因为不再需要。
虽然我不确定该方法的 return(我还没有找到相关线索)是否用于当前实现。
ExecutorService 有一个方法
List<Runnable> shutdownNow()
哪个
returns a list of the tasks that were awaiting execution.
但是,ForkJoinPool 总是 returns a Collection.emptyList()。因为,ForkJoinPool 的实现
attempts to cancel and/orstop all tasks, and reject all subsequently submitted tasks,
它不应该也return被取消的任务列表吗?
为什么是空列表?
文档解释说(重点是我的):
This method cancels both existing and unexecuted tasks, in order to permit termination in the presence of task dependencies. So the method always returns an empty list (unlike the case for some other Executors).
为什么?
因为 ForkJoinPool
是 ExecutorService
的 "special" 实现。
它可能有一些与执行的分叉相关的任务依赖性。
例如,在下面的例子中,如果提交的任务被停止,您还希望子任务 1 和子任务 2 也被终止:
这就是为什么当您停止 ForkJoinPool
实例的任务时,您将 return 一个 List
表明没有更多的任务在等待。这样,任何等待其他任务终止或当前正在处理的任务也将终止,因为不再需要。
虽然我不确定该方法的 return(我还没有找到相关线索)是否用于当前实现。