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)
对于您的具体示例,您很幸运没有看到任何差异(添加循环,101以便元素在线程之间分布更差并查看差异)forEach记录为:
此操作的行为是明确不确定的
因此,至少对于并行处理,将没有顺序 - 至少在您可以依赖的意义上。还有就是forEachOrdered那不保证顺序-如果你需要它。
选择parallel还是sequential不容易——你应该衡量,Brian 的建议最好在这里阅读