处理器如何保证原子操作
- 使用总线锁保证原子性
- 使用缓存锁保证原子性
java.util.concurrent.atomic包提供了多个对数字类型进行操作的类
- AtomicInteger
- AtomicIntegerArray
- AtomicIntegerFieldUpdater
- AtomicBoolean
- AtomicLong
- AtomicLongArray
- AtomicLongFieldUpdater
- AtomicReference
- AtomicReferenceArray
- AtomicReferenceFieldUpdater
- LongAdder
- LongAccumulator
- DoubleAdder
- DoubleAccumulator
主要API
- getAndUpdate——以原子方式用给定的方法更新当前值,并返回变更之前的值;
- updateAndGet——以原子方式用给定的方法更新当前值,并返回变更之后的值;
- getAndAccumulate——以原子方式用给定的方法对当前及给定的值进行更新,并返回变更之前的值;
- accumulateAndGet——以原子方式用给定的方法对当前及给定的值进行更新,并返回变更之后的值;
【知识点】
- JDK8推荐使用LongAdder对象,比AtomicLong性能更好;
- JVM中的CAS操作正是利用了处理器提供的CMPXCHG指令实现的;