java - 多线程:在 Java 8中,在parallelStream中产生多少个线程?

  显示原文与译文双语对照的内容
75 2

在JDK8中,当我使用parallelStream时产生了多少个线程?例如在代码中:

list.parallelStream().forEach(/** Do Something */);

如果这个列表有 100000个项目,那么将会产生多少个?

另外,每个线程都得到相同数量的项目来处理或者是随机分配的?

时间:原作者:0个回答

104 5

并行流的oracle [1] 使用当前线程,除这里之外,还有组成默认 fork Join 池 ForkJoinPool.common()的线程。

可以使用这里属性更改公共池的默认大小:

-Djava.util.concurrent.ForkJoinPool.common.parallelism=8

或者,你也可以使用自己的池:

ForkJoinPool myPool = new ForkJoinPool(8);
myPool.submit(() ->
 list.parallelStream().forEach(/* Do Something */);
).get();

对于订单,只要线程可用,就会立即执行作业,而没有特定的顺序。

[1] 正确指出 @Holger 这是实现特定于oracle的细节,两种方法都可以在 oracle JVM上工作,但是绝对不能保证基于 ForkJoinTask.fork的特性,而Streams完全无用的( 。在这里查看有关这里问题的详细信息) 。

原作者:
...