AtomicLong
实现机制:基于 CAS(Compare-And-Swap)操作实现的。
性能:适合低争用场景。如果多个线程频繁更新同一个 AtomicLong,可能会导致性能瓶颈,因为所有线程都在竞争同一个原子变量。
使用场景:适用于更新频率较低的情况。
LongAdder
实现机制:基于分段锁和分散热点的思想。内部维护一个基于分段的数组,每个线程更新时更新不同的段(Cell),这样减少了线程之间的竞争。
性能:在高争用场景下性能更佳,因为减少了线程之间的竞争。
使用场景:适用于高频率更新的情况,能更好地利用多核 CPU 的能力。
总结
在低争用下,两者性能相似。
在高争用下,LongAdder 通常比 AtomicLong 更高效。
LongAdder 的数据最终一致性需要通过 sum() 方法计算,适合用于统计计数而非精确计数。