1. 基本类型

  1. AtomicBoolean
  2. AtomicInteger
  3. AtomicLong

常用方法有:

  • addAndGet(delte) :更新操作,返回结果
  • compareAndSet(expect, update) :CAS操作
  • getAndSet(newValue) :原子赋值,返回旧值
  • getAndIncrement() :自增操作
  • lazySet(newValue) :赋值后的一小段时间内,其它线程还是可以读到旧的值。

    2. 数组

  1. AtomicIntegerArray
  2. AtomicLongArray
  3. AtomicReferenceArray

常用方法为:

  • addAndGet(i, delta) :更新第i个元素
  • comapreAndSet(i, expetct, update):CAS第i个元素

    3. 引用类型

  1. AtomicReference :原子更新引用类型,用于一次更新多个字段
  2. AtomicReferenceFieldUpdater
  3. AtomicMarkableReference

使用示例:

  1. AtomicReference<User> atom = new AtomicReference<>();
  2. User oldOne = new User("Old");
  3. User newOne = new User("New");
  4. atom.set(oldOne); // bind data
  5. atom.compareAndSet(oldOne, newOne); // CAS update
  6. newOne = atom.get(); // use updated data

4. 字段

  1. AtomicIntegerFieldUpdater :必须用 public volatile 修饰符才能原子性地更改字段
  2. AtomicLongFieldUpdater
  3. AtomicStampedFieldUpdater
  4. AtomicReferenceFieldUpdater<br />

使用示例:

  1. AtomicIntegerFieldUpdater<User> atom = AtomicIntegerFieldUpdater.newUpdater(User.class, "age");
  2. User cobe = new User(10);
  3. atom.getAndIncrement(cobe);
  4. atom.get(cobe); // will be 11
  5. class User{ public volatile age; getAge(); setAge(); }