package com.jujutsu.tsne.barneshut; import java.util.concurrent.atomic.AtomicReference; class AtomicDouble { private AtomicReference<Double> value = new AtomicReference<Double>(Double.valueOf(0.0)); double addAndGet(double delta) { while (true) { Double currentValue = value.get(); Double newValue = Double.valueOf(currentValue.doubleValue() + delta); if (value.compareAndSet(currentValue, newValue)) return currentValue.doubleValue(); } } double get() { return Double.valueOf(value.get()); } }