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

LongAdder和AtomicLong性能对比

 

posted on 2020-09-20 15:07  frank_cui  阅读(227)  评论(0编辑  收藏  举报

导航

levels of contents