官方文档在哪里说Java的并行流操作使用fork / join?


问题内容

这是我对Java 8Stream框架的理解:

  1. 东西产生了源
  2. 该实现负责提供 BaseStream#parallel() 方法,该方法进而返回可以并行运行其操作的Stream。

尽管有人已经找到了一种将自定义线程池与Stream框架的并行执行结合使用的方法,但是我一生无法在Java 8
API中提及默认的Java
8并行Stream实现将使用ForkJoinPool#commonPool()。(Collection#parallelStream()StreamSupport类中的方法以及我不知道的API中其他可能启用并行的流的源)。

这些只有我能从搜索结果中看到的花絮是:

Fork / Join机械设计用于使此过程自动化。

  • JEP 107:集合的批量数据操作
    几乎直接声明了Collection接口的默认方法#parallelStream()使用Fork / Join实现自身。但是,关于通用池仍然一无所获。

并行实现基于Java 7中引入的java.util.concurrency Fork / Join实现。

因此:Collection#parallelStream()

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和流)