La implementación de Oracle [1] de flujo paralelo usa el hilo actual y además de eso, si es necesario, también los hilos que componen el grupo de unión de bifurcación predeterminado ForkJoinPool.commonPool()
, que tiene un tamaño predeterminado igual a uno menos que el número de núcleos de su CPU .
Ese tamaño predeterminado de la piscina común se puede cambiar con esta propiedad:
-Djava.util.concurrent.ForkJoinPool.common.parallelism=8
Alternativamente, puede usar su propia piscina:
ForkJoinPool myPool = new ForkJoinPool(8);
myPool.submit(() ->
list.parallelStream().forEach();
).get();
En cuanto al orden, los trabajos se ejecutarán tan pronto como un hilo esté disponible, sin un orden específico.
Como lo señaló correctamente @Holger, este es un detalle específico de implementación (con solo una referencia vaga en la parte inferior de un documento), ambos enfoques funcionarán en la JVM de Oracle, pero definitivamente no se garantiza que funcionen en las JVM de otros proveedores, la propiedad podría no existe en una implementación que no sea de Oracle y Streams ni siquiera podría usar una ForkJoinPool
representación interna de la alternativa basada en el comportamiento de ForkJoinTask.fork
completamente inútil ( consulte aquí para obtener detalles sobre esto).