【发布时间】:2018-01-27 00:53:24
【问题描述】:
在 Java 中使用并行流代替执行器服务是否被认为是不好的做法?为什么?
如您所知,myList.parallelStream().map(e -> ...) 将在后台使用ForkJoinPool.common()。因此,如果您将同时使用至少两个并行流,您可能会在以下情况下遇到问题:
-
map函数被阻塞。但是有 ForkJoinPool.ManagedBlocker 作为救援。 -
map函数可能会占用大量 CPU,这将导致其他并行流饿死。 有没有办法在RecursiveTasks 或ForkJoinPools 之间设置优先级?
另一方面,您可以根据需要创建任意数量的ForkJoinPools。 new ForkJoinPool(4).submit(() -> myList.parallelStream()...。 在一个 JVM 上使用多个 ForkJoinPools 是否考虑到性能?
更新
使用或不使用并行流 = 使用或不使用 ForkJoinPool,对吗?我发现 this 和 this 链接对于回答最后一个问题非常有用
【问题讨论】:
标签: java parallel-processing java-stream