加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java 8 Streams中的并行和平面图

发布时间:2020-12-14 05:10:28 所属栏目:Java 来源:网络整理
导读:嗨,我使用flatmap有一个关于并行的问题 请考虑以下示例 IntStream.of(-1,1).parallel().flatMap(i-IntStream.range(0,1000).parallel()).forEach(System.out::println); 是否将内部标志设置为并行?如果我离开它,结果看起来很相似. 为什么代码(ReferencePipe
嗨,我使用flatmap有一个关于并行的问题
请考虑以下示例
IntStream.of(-1,1).parallel().flatMap(i->IntStream.range(0,1000).parallel()).forEach(System.out::println);

是否将内部标志设置为并行?如果我离开它,结果看起来很相似.
为什么代码(ReferencePipeline)顺序化映射?
我感到困惑:

result.sequential().forEach(downstream);

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/stream/ReferencePipeline.java#ReferencePipeline.flatMap%28java.util.function.Function%29

解决方法

在当前的JDK(jdk1.8.0_25)中,答案是否定的,将内部标志设置为并行无关紧要,
因为即使你设置它,.flatMap()实现集将流回到顺序在这里:
result.sequential().forEach(downstream);

(“result”是内部流,它的sequential()方法的doc说:返回一个等价的流,它是顺序的,可能返回自己,因为流已经是顺序的,或者因为底层的流状态被修改为顺序的.

在大多数情况下,不可能使内流平行;如果外部流具有与可以并行运行的线程数相同数量的项目(ForkJoinPool.commonPool().在我的计算机中的getParallelism()= 3).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读