Gibt es ein Szenario, in dem AtomicInteger.accumulateAndGet()
nicht durch AtomicInteger.updateAndGet()
ersetzt werden kann, oder ist es nur eine Annehmlichkeit für Methodenreferenzen?Gibt es einen funktionalen Unterschied zwischen AtomicInteger.updateAndGet() und AtomicInteger.accumulateAndGet()?
Hier ist ein einfaches Beispiel, wo ich sehe keinen funktionalen Unterschied:
AtomicInteger i = new AtomicInteger();
i.accumulateAndGet(5, Math::max);
i.updateAndGet(x -> Math.max(x, 5));
Offensichtlich ist das gleiche gilt für getAndUpdate()
und getAndAccumulate()
.
Ist die Fähigkeit, vorhandene Funktionen (oder nicht erfassende Methodenreferenzen) zu verwenden, nicht hilfreich? Es gibt auch keinen funktionalen Unterschied zwischen "i.incrementAndGet()" und "i.accumulateAndGet (1, Integer :: sum)" ... – Holger
@Holger 'accumulateAndGet()' wurde später hinzugefügt und kann nicht 'Unsafe' verwenden. 'addAndGet (1)' könnte ein besseres Beispiel sein, aber selbst das verwendete zum Zeitpunkt seiner Erstellung nicht 'Unsicher'. Ich akzeptiere jedoch Ihren allgemeinen Standpunkt; Diese Frage soll nur klären, ob das tatsächlich die Motivation war. – shmosel