官方文档在哪里说Java的并行流操作使用fork / join?
问题内容:
这是我对Java 8Stream框架的理解:
- 东西产生了源溪
- 该实现负责提供 BaseStream#parallel() 方法,该方法进而返回可以并行运行其操作的Stream。
尽管有人已经找到了一种将自定义线程池与Stream框架的并行执行结合使用的方法,但是我一生无法在Java 8
API中提及默认的Java
8并行Stream实现将使用ForkJoinPool#commonPool()。(Collection#parallelStream(),StreamSupport类中的方法以及我不知道的API中其他可能启用并行的流的源)。
这些只有我能从搜索结果中看到的花絮是:
- Lambda的状态:图书馆版(“引擎盖下的并行化”)
模糊地提到了Stream框架和Fork / Join机制。
Fork / Join机械设计用于使此过程自动化。
- JEP 107:集合的批量数据操作
几乎直接声明了Collection接口的默认方法#parallelStream()使用Fork / Join实现自身。但是,关于通用池仍然一无所获。
并行实现基于Java 7中引入的java.util.concurrency Fork / Join实现。
因此:Collection#parallelStream()。
- 类数组(Javadoc)
多次直接声明使用公共池。
ForkJoin公共池用于执行任何并行任务。
所以我的问题是:
哪里说ForkJoinPool#commonPool()用于对从Java8 API获得的流进行并行操作?
问题答案:
在哪里可以证明Java 8并行流使用FJ Framework?
Afaik(Java 1.8u5)在并行流的JavaDoc中没有提到使用常见的ForkJoinPool。
但这是在http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html底部的ForkJoin文档中提到的。
WRT替换线程池
我的理解是,您可以使用自定义的ForkJoinPool(而不是常用的)(请参阅Java8并行流中的自定义线程池),但不能使用与ForkJoin实现不同的自定义ThreadPool
WRT取代Streams API
您可以签出https://github.com/nurkiewicz/LazySeq,它更像是Scala类的流实现-
非常好,非常有趣
PS(wrt ForkJoin和流)