并行流与串行流
2022-09-03 01:47:31
并行流是否有可能给出与 Java 8 中的串行流不同的结果?根据我的信息,并行流与串行流相同,只是分为多个子流。这是一个速度问题。完成对元素的所有操作,并在最后合并子流的结果。最后,在我看来,并行流和串行流的操作结果应该是相同的。所以我的问题是,这个代码有没有可能给我一个不同的结果?如果这是可能的,为什么会发生这种情况?
int[] i = {1, 2, 5, 10, 9, 7, 25, 24, 26, 34, 21, 23, 23, 25, 27, 852, 654, 25, 58};
Double serial = Arrays.stream(i).filter(si -> {
return si > 5;
}).mapToDouble(Double::new).map(NewClass::add).reduce(Math::atan2).getAsDouble();
Double parallel = Arrays.stream(i).filter(si -> {
return si > 5;
}).parallel().mapToDouble(Double::new).map(NewClass::add).reduce(Math::atan2).getAsDouble();
System.out.println("serial: " + serial);
System.out.println("parallel: " + parallel);
public static double add(double i) {
return i + 0.005;
}
结果是:
serial: 3.6971567726175894E-23
parallel: 0.779264049587662