代码
- version: 1.8
- code path: jdk8u/jdk/src/share/classes/java/util/concurrent/atomic
收获
- Atomic* 由 Unsafe实现
- Unsafe: 声明一些native方法,jdk8u/jdk/src/share/classes/sun/misc/Unsafe.java
- AtomicLong等比较大的数据类型,在系统层面不支持的时候采用java lock实现 // VMSupportsCS8()
- weakCompareAndSet和CompareAndSet实现一致,不懂为什么注视说二者行为会不同
- AtomicIntegerArray && AtomicLongArray, 位运算+Atomic*
- Atomic*FieldUpdater 原子更新其他类的field, 反射 + Unsafe
- LongAccumulator && DoubleAccumulator @since 1.8 高性能累加器,核心代码Striped64.java,将写压力分摊到多个cell,适用于与ConcurrentHashMap结合来统计状态,不能做key
- LongAdder && DoubleAdder @since 1.8 只能适用于做sum && count, *Accumulator的简化版;LongAdder -> LongAccumulator((x, y) -> x + y, 0L)