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

Java 为什么ForkJoinPool::shutdownNow返回空列表?,java,java-8,executorservice,Java,Java 8,Executorservice,ExecutorService有一个方法 List<Runnable> shutdownNow() 列表关闭现在() 哪个 返回等待执行的任务的列表 但是,ForkJoinPool始终返回一个Collection.emptyList()。自从,ForkJoinPool的实现 尝试取消和/或停止所有任务,并拒绝所有随后提交的任务 它不也应该返回已取消的任务列表吗?为什么是空列表? 文件解释说(重点是我的): 此方法取消现有和未执行的任务,以便 允许在存在任务依赖项时终止。那么方法呢

ExecutorService有一个方法

List<Runnable> shutdownNow()
列表关闭现在()
哪个

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

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

尝试取消和/或停止所有任务,并拒绝所有随后提交的任务

它不也应该返回已取消的任务列表吗?

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

此方法取消现有和未执行的任务,以便 允许在存在任务依赖项时终止。那么方法呢 始终返回一个空列表(与其他一些 遗嘱执行人)

为什么?

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


这就是为什么当您停止一个
ForkJoinPool
实例的任务时,您将返回一个
列表
,指示不再等待任何任务。这样,等待某些其他任务终止或当前正在处理的任何任务也会因不再需要而终止。

虽然我不确定方法的返回(我还没有找到关于它的线索)是否用于当前的实现

您引用了yourself,返回等待执行的任务列表。已取消的任务不会等待execution@Lino然后我不确定ThreadPoolExecutor为什么会返回任务列表。它还尝试停止所有ActiveL正在执行的任务,停止正在等待的任务的处理,并返回正在等待执行的任务的列表。引用javadoc。shutdownNow()对两者的工作方式有区别吗?