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识堂]]