gpt4 book ai didi

java - Java 8 中的parallelStream 中产生了多少个线程?

转载 作者:行者123 更新时间:2023-12-01 16:34:59 25 4
gpt4 key购买 nike

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

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

如果此列表有 100000 个项目,将生成多少个线程?

此外,每个线程都获得相同数量的要处理的项目还是随机分配的?

最佳答案

Oracle 并行流的实现[1]使用当前线程,此外,如果需要的话,还使用组成默认 fork join pool ForkJoinPool.commonPool() 的线程,它具有默认大小等于 CPU 核心数减一。

可以使用此属性更改公共(public)池的默认大小:

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

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

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

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

正如 @Holger 正确指出的那样,这是一个特定于实现的细节(文档底部只有 one vague reference),这两种方法都可以在 Oracle 的 JVM 上工作,但绝对不能保证在其他供应商的 JVM 上工作,该属性不可能存在于非 Oracle 实现中,并且 Streams 甚至无法使用 ForkJoinPool 在内部呈现基于 ForkJoinTask.fork 行为的替代方案,完全无用( see here 有关详细信息这个)。

关于java - Java 8 中的parallelStream 中产生了多少个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61973296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com