1. 基本类型
AtomicBoolean
AtomicInteger
AtomicLong
常用方法有:
addAndGet(delte)
:更新操作,返回结果compareAndSet(expect, update)
:CAS操作getAndSet(newValue)
:原子赋值,返回旧值getAndIncrement()
:自增操作lazySet(newValue)
:赋值后的一小段时间内,其它线程还是可以读到旧的值。2. 数组
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
常用方法为:
AtomicReference
:原子更新引用类型,用于一次更新多个字段AtomicReferenceFieldUpdater
AtomicMarkableReference
使用示例:
AtomicReference<User> atom = new AtomicReference<>();
User oldOne = new User("Old");
User newOne = new User("New");
atom.set(oldOne); // bind data
atom.compareAndSet(oldOne, newOne); // CAS update
newOne = atom.get(); // use updated data
4. 字段
AtomicIntegerFieldUpdater
:必须用public volatile
修饰符才能原子性地更改字段AtomicLongFieldUpdater
AtomicStampedFieldUpdater
AtomicReferenceFieldUpdater<br />
使用示例:
AtomicIntegerFieldUpdater<User> atom = AtomicIntegerFieldUpdater.newUpdater(User.class, "age");
User cobe = new User(10);
atom.getAndIncrement(cobe);
atom.get(cobe); // will be 11
class User{ public volatile age; getAge(); setAge(); }