处理器如何保证原子操作

  • 使用总线锁保证原子性
  • 使用缓存锁保证原子性

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指令实现的;

results matching ""

    No results matching ""