- Compare And Set/Swap, 无锁优化, 乐观锁, 自旋
- Unsafe类支持
- CPU原语
- cas(V, Expected, NewValue)
- if V == E # 无并发值判断问题,原语上加了屏障
- V = New
- else try again or fail
- cas(V, Expected, NewValue)
- Java
- AtomicInteger
- incrementAndGet()
- AtomicInteger
- ABA问题
- 线程1读取标记, 线程2改过又改回来,线程1判断标记锁住了提交了业务数据
- 版本号 # Java版本号类AtomicStampedReference
- LongAdder
- LongAdder每次加数字, LongAccumulator用lambda
- 分段锁(CAS)。值分开放数组里, 多线程对应一个item
- 性能测试
- LongAdder(713) > Atomic(2166) > Synchronized(3129)