Es gibt einen Hinweis am Ende des atomics package summary, die besagt:hinzufügen Atom Doppel
... können Sie auch halten
floats
Float.floatToIntBits
undFloat.intBitstoFloat
Konvertierungen verwenden unddoubles
mitDouble.doubleToLongBits
undDouble.longBitsToDouble
Konvertierungen.
Natürlich kann man nicht nur diese Werte addieren sich so was das Äquivalent zu dem Atom addAndGet
für einen double
Wert wäre.
private AtomicLong sum = new AtomicLong();
...
// This would almost certainly NOT work.
public long add(double n) {
return sum.addAndGet(Double.doubleToLongBits(n));
}
Sie können davon ausgehen, ich sehr hart versuchen synchronized
nicht zu verwenden.
Ah ja! Ich kann sehen, wie das der einzige Weg wäre, ohne zu JNI und Assembler zu gehen. Könnten Sie bitte hier die Lösung als Code zur Vollständigkeit posten? Nur das 'addAndGet' wäre ausreichend. – OldCurmudgeon
Lösung veröffentlicht. –
Obwohl Hunger in der Theorie ein Problem sein kann, denke ich, dass es in der Praxis nicht wirklich vorkommt. – biziclop