(十六)J.U.C之atomic框架:LongAdder

JDK1.8时,java.util.concurrent.atomic包中提供了一个新的原子类:LongAdder
根据Oracle官方文档的介绍,LongAdder在高并发的场景下会比它的前辈AtomicLong具有更好的性能,代价是消耗更多的内存空间。

 

引入这个类的原因是,在并发量很高的情况下,自旋CAS会出现大量失败并不断自旋的情况,此时AtomicLong的自旋会成为瓶颈。

而LongAdder通过分散热点,将value值分散到一个数组中,不同线程会命中数组的不同槽中,各个线程只对自己槽中的那个值进行CAS操作,这样热点就被分散了,冲突的概率就小很多。如果要获取真正的long值,只要将各个槽中的变量值累加返回(需要注意的是,只能返回某个时刻的近似值,因为累加返回的时候其它线程可能还在修改值)。

 

JDK1.8时,java.util.concurrent.atomic包中,除了新引入LongAdder外,还有引入了它的三个兄弟类:LongAccumulatorDoubleAdderDoubleAccumulator

LongAdder只能进行数值的加减运算,而LongAccumulator提供了自定义的函数操作。至于DoubleAdder、DoubleAccumulator就是将Long类型换成了Double类型。

 

 

具体原理请查看https://segmentfault.com/a/1190000015865714

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值