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?