并发编程专题-基础-17、LongAdder
1. 是什么
JDK1.8之后推出的原子操作增强类
1.1. 继承关系
2. 底层原理
3. 源码解读
3.1. add方法
3.1.1. base的cas
3.1.2. cell的cas
3.2. longAccumulate方法
3.2.1. getProbe()
3.2.2. 功能划分
3.2.3. 步骤拆解
3.2.3.1. 首次进入时走CASE2
add()方法中base在多线程下cas发生失败时,会进入longAccumulate方法。首次进入cells为null,进入CASE2
3.2.3.2. 兜底方案CASE3
3.2.3.3. CASE1
cells不为空,其中有个cell为null,进入longAccumulate方法
3.2.3.3.1. 坑位为空,写入
3.2.3.3.2. 坑位不为空,继续循环
3.2.3.3.3. 坑位不为空,cas成功
3.2.3.3.4. 不能扩容
3.2.3.3.5. 扩容
3.2.3.3.6. 总结
3.3. sum方法
3.3.1. 不精确的
3.4. 与AtomicLong对比
3.4.1. AtomicLong
3.4.2. LongAdder
4. 代码示例
5. 实战经验
6. 参考与感谢
[[20221111-都有了AtomicLong,为什么还要提供LongAdder? Java识堂]]
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Taylor!
评论