Java 多线程 - LongAdder 与 AtomicLong有什么区别
总结
AtomicLong
AtomicLong 是基于 CAS 方式自旋更新的。
唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高, 重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低。
LongAdder
LongAdder 是把 value 分成若干cell。
- 并发量低的时候,直接 CAS 更新值,成功即结束。
- 并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。
- 取值的时候,调用 sum() 方法进行每个cell累加。
参考
LongAdder原理解析: https://www.jianshu.com/p/b3c5b05055de