【java】LongAdder源码分析原理分析

409 篇文章 483 订阅 ¥19.90 ¥99.00
本文深入分析了Java中LongAdder的设计思想和源码,探讨了为何在高并发场景下优于AtomicLong。通过案例展示LongAdder的使用,并详细解释了add方法和longAccumulate方法的实现,包括初始化、并发竞争、扩容等关键步骤,揭示了LongAdder如何通过空间换取时间来提升性能。
摘要由CSDN通过智能技术生成


在这里插入图片描述

1.概述

先参考使用相关的文档:

高并发中计数器的实现方式有哪些?

【java】阿里为什么推荐使用LongAdder,而不是volatile?

针对JDK中的原子类,想必大家都熟悉AtomicInteger,AtomicLong等类。他们都是采用CAS乐观锁方式来实现的。

但是这种方式是否还有继续优化的空间呢?答案是肯定的。

CAS乐观锁对临界区的数据(也就是atomicLong中的volatile long value属性)进行修改,这个属性是热点数据。并发量高的时候,会出现很多线程都轮询修改value属性的情况,CPU消耗比较高

大家在想一下,在秒杀,拍卖,银行转账等业务场景下,可能存在以下情况:大量客户的请求都需要修改某个银行账户的余额。有一种优化策略就是将该银行热点账户拆分为多条记录,将请求hash路由到不同的子账户中进行计算。那么上述Atomic类也可以采用该种策略:热点数据拆分。

这就是阅读源码的作用,可以学习到各种各样的优秀设计,并且可以将其应用到具体的工作之中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值