Java 1.8 中并行流和顺序流的区别

Har*_*tel 5 java lambda functional-programming java-8 java-stream

就 Java 1.8 而言,顺序流和并行流之间的功能区别是什么,输出将如何受到影响?

以及在哪些场景下选择并行或顺序流?

Java中顺序流和并行流的处理方法有什么区别?!

我尝试了下面的代码片段来用少量数据对其进行测试,但输出没有任何异常差异。!!

ArrayList<Integer> arrayList = new ArrayList<>();
for(int i = 1; i <= 100;i++) arrayList.add(i);

arrayList.stream().filter(l -> l > 90).forEach(l -> System.out.println(l));

arrayList.parallelStream().filter(l -> l > 90).forEach(l -> System.out.println(l));
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 5

对于您的具体示例,您很幸运没有看到任何差异(添加循环,101以便元素在线程之间分布更差并查看差异)forEach记录为:

此操作的行为是明确不确定的

因此,至少对于并行处理,将没有顺序 - 至少在您可以依赖的意义上。还有就是forEachOrdered保证顺序-如果你需要它。

选择parallel还是sequential不容易——你应该衡量,Brian 的建议最好在这里阅读