总结

AtomicLong

AtomicLong 是基于 CAS 方式自旋更新的。

唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高, 重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低。

 

LongAdder

LongAdder 是把 value 分成若干cell。

  • 并发量低的时候,直接 CAS 更新值,成功即结束。
  • 并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。
  • 取值的时候,调用 sum() 方法进行每个cell累加。