2020-10-18:java中LongAdder和AtomicLong有什么区别?

福大大架构师每日一题 2020-10-18 07:30:38
2020-10-18:java中LongAdder和AtomicLong有什么区别?#福大大架构师每日一题#
...全文
1280 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
AtomicLong是CAS操作。LongAdder是多个单元操作。
亦夜 2020-10-18
  • 打赏
  • 举报
回复
AtomicLong :AtomicLong 是基于 CAS 方式自旋更新的。唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高, 重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低。AtomicLong 包含有原子性的读、写结合的api。 LongAdder:LongAdder 是把 value 分成若干cell,并发量低的时候,直接 CAS 更新值,成功即结束。并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。取值的时候,调用 sum() 方法进行每个cell累加。LongAdder 没有原子性的读、写结合的api,能保证结果最终一致性。
韩_师兄 2020-10-18
  • 打赏
  • 举报
回复
引用 1 楼 亦夜 的回复:
AtomicLong :AtomicLong 是基于 CAS 方式自旋更新的。唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高, 重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低。AtomicLong 包含有原子性的读、写结合的api。 LongAdder:LongAdder 是把 value 分成若干cell,并发量低的时候,直接 CAS 更新值,成功即结束。并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。取值的时候,调用 sum() 方法进行每个cell累加。LongAdder 没有原子性的读、写结合的api,能保证结果最终一致性。
大佬,总结到位!

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧