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