java - java的ForkJoinPool.commonPool() 等价于没有池?

  显示原文与译文双语对照的内容
91 0

我决定使用并行流确实比数据集的串行流快。所以,我想知道在这个问题中所讨论的ForkJoinPool是如何使用的:8并行流管理器中的自定义线程池。

考虑到

void foo()
{
 barCollection.parallelStream() … do something with the stream
}

1 & 2小于等于哪个池将被使用?

1 )

ForkJoinPool.commonPool().submit(()->foo()).get();

2 )

foo();

如果答案是正确的,那么为什么 ForkJoinPol.commonPool() 方法存在?

时间:原作者:0个回答

147 0

并行流执行将使用公共池,但是流库只是该池的一个可能的客户机。

关于为什么存在 commonPool() 方法,你的假定--由于流--而存在的假设是错误的。公共池存在( 而且很容易到达) 以防止在另一个并行操作中创建一个并行操作,从而在单个JVM上创建太多池线程,从而减少效率。通常,最小阻力--仅使用公共池--也是最佳选择。

并行流是类似的并行操作发起者,并使用公共池,但不特殊。

原作者:
...