LongAdder相比AtomicLong的优势

LongAdder相比AtomicLong的优势

LongAdder相比AtomicLong最核心的优势在于大幅降低了高并发场景下的CAS竞争开销。当多个线程频繁对AtomicLong进行递增操作时,所有线程都会竞争同一个内存位置,导致大量CAS失败重试,性能急剧下降。这就像几十个人同时去抢一把锁,成功率极低,大家都在空转浪费CPU。

LongAdder采用分段累加策略巧妙地解决了这个问题。它的核心思想其实很朴素,就是”分而治之”—既然大家抢一个资源会冲突,那就准备多个资源让大家分开抢。LongAdder内部维护一个Cell数组和一个base值,当发生竞争时会动态扩容Cell数组。每个线程通过ThreadLocalRandom计算出一个probe值,映射到不同的Cell槽位进行累加操作,这样就把竞争分散到多个内存位置上。读取总值时会遍历所有Cell求和再加上base值

具体工作机制是:初始状态所有操作都在base上进行,一旦检测到CAS竞争失败,就会初始化Cell数组并重新哈希线程到不同槽位。如果某个Cell仍然竞争激烈,会继续扩容数组直到达到CPU核心数。这种设计让写操作几乎无锁化,但读操作相对较重,因此LongAdder特别适合写多读少的计数场景,比如监控系统的QPS统计、缓存命中率计算等。


LongAdder相比AtomicLong的优势
http://example.com/2026/01/19/LongAdder相比AtomicLong的优势/
作者
Kon4tsu
发布于
2026年1月19日
许可协议