考虑以下示例:
IntStream.of(-1, 1)
.parallel()
.flatMap(i->IntStream.range(0,1000).parallel())
.forEach(System.out::println);
我是否将内部标志设置为并行有关系吗?无论我是否将其保留,结果看起来都非常相似。
另外为什么代码(ReferencePipeline
)对映射进行排序?
我很困惑line 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:
result.sequential().forEach(downstream);
在当前的JDK(jdk1.8.0_25)中,答案是否定的,将内部标志设置为并行并不重要,
因为即使你设置了它,.flatMap 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() 实现将流设置回顺序的 here:
result.sequential().forEach(downstream);
(“结果”是内部流,它是顺序() http://docs.oracle.com/javase/8/docs/api/java/util/stream/BaseStream.html#sequential--方法的文档说:返回一个等效的连续流。可能会返回自身,因为流已经是顺序的,或者因为基础流状态已修改为顺序的。)
大多数情况下可能有不费力使内流平行;如果外部流的项目数至少与可以并行运行的线程数相同(ForkJoinPool.commonPool().getParallelism() = 3
在我的电脑中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)