嗨,我使用flatmap有一个关于并行的问题
请考虑以下示例
请考虑以下示例
IntStream.of(-1,1).parallel().flatMap(i->IntStream.range(0,1000).parallel()).forEach(System.out::println);
是否将内部标志设置为并行?如果我离开它,结果看起来很相似.
为什么代码(ReferencePipeline)顺序化映射?
我感到困惑:
result.sequential().forEach(downstream);
解决方法
在当前的JDK(jdk1.8.0_25)中,答案是否定的,将内部标志设置为并行无关紧要,
因为即使你设置它,.flatMap()实现集将流回到顺序在这里:
因为即使你设置它,.flatMap()实现集将流回到顺序在这里:
result.sequential().forEach(downstream);
(“result”是内部流,它的sequential()方法的doc说:返回一个等价的流,它是顺序的,可能返回自己,因为流已经是顺序的,或者因为底层的流状态被修改为顺序的.
在大多数情况下,不可能使内流平行;如果外部流具有与可以并行运行的线程数相同数量的项目(ForkJoinPool.commonPool().在我的计算机中的getParallelism()= 3).
原文地址:https://www.jb51.cc/java/123311.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。