Возможно ли, что параллельный поток может дать другой результат, чем последовательный поток в 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