как если бы у вас не было выбора ответов, вот мой:
// while the update appears bigger than the atomic, try to update the atomic.
private void max(AtomicDouble atomicDouble, double update) {
double expect = atomicDouble.get();
while (update > expect) {
atomicDouble.weakCompareAndSet(expect, update);
expect = atomicDouble.get();
}
}
это более или менее совпадает с принятым ответом, но не использует break
или while(true)
который мне лично не нравится.
РЕДАКТИРОВАТЬ: только что обнаружил DoubleAccumulator
в Java 8. В документации даже сказано, что это для проблем с краткой статистикой, как у вас:
DoubleAccumulator max = new DoubleAccumulator(Double::max, Double.NEGATIVE_INFINITY);
parallelStream.forEach(max::accumulate);
max.get();