Here's my understanding of the Stream framework of Java 8:
- Something creates a source Stream
- The implementation is responsible for providing a BaseStream#parallel() method, which in turns returns a Stream that can run it's operations in parallel.
While someone has already found a way to use a custom thread pool with Stream framework's parallel executions, I cannot for the life of me find any mention in the Java 8 API that the default Java 8 parallel Stream implementations would use ForkJoinPool#commonPool(). (Collection#parallelStream(), the methods in StreamSupport class, and others possible sources of parallel-enabled streams in the API that I don't know about).
Only tidbits that I could gleam off search results were these:
State of the Lambda: Libraries Edition ("Parallelism under the hood")
Vaguely mentions the Stream framework and the Fork/Join machinery.The Fork/Join machinery is designed to automate this process.
JEP 107: Bulk Data Operations for Collections
Almost directly states that the the Collection interface's default method #parallelStream() implements itself using Fork/Join. But still nothing about common pool.The parallel implementation builds upon the java.util.concurrency Fork/Join implementation introduced in Java 7.
and hence: Collection#parallelStream().
Class Arrays (Javadoc)
Directly states multiple times that the common pool is used.The ForkJoin common pool is used to execute any parallel tasks.
So my question is:
Where is it said that the ForkJoinPool#commonPool() is used for parallel operations on streams that are obtained from the Java 8 API?
ForkJoinPool.getCommonPoolParallelism()
. No other mention of fork/join though. – Lukas