bn.*_*bn. 10 java multithreading java-8
我已经确定使用并行流确实比我的数据集的串行流更快.话虽如此,我想知道在这个问题中讨论使用的ForkJoinPool:Java 8并行流中的自定义线程池.
鉴于,
void foo()
{
barCollection.parallelStream() … do something with the stream
}
Run Code Online (Sandbox Code Playgroud)
相对于哪个池将使用1和2以下?
1)
ForkJoinPool.commonPool().submit(()->foo()).get();
Run Code Online (Sandbox Code Playgroud)
2)
foo();
Run Code Online (Sandbox Code Playgroud)
如果答案是肯定的,那么为什么该ForkJoinPol.commonPool()
方法存在?
Bri*_*etz 17
并行流执行将使用公共池,但流库只是该池的一个可能的客户端.
至于为什么该commonPool()
方法存在,你的假设 - 由于流存在公共池 - 是不正确的.公共池存在(并且很容易到达)以防止不可避免的"公共悲剧",其中并行操作的每个启动器创建它们自己的池,导致单个JVM上的池线程太多,从而破坏了效率.对于公共游泳池,阻力最小的路径 - 只需使用公共游泳池 - 通常也是最佳选择.
并行流是并行操作的一个这样的启动器,并使用公共池,但不是特殊的.
归档时间: |
|
查看次数: |
3586 次 |
最近记录: |