1.类 AtomicIntegerFieldUpdater<T>
public abstract class AtomicIntegerFieldUpdater<T> extends Object
基于反射的实用工具,可以对指定类的指定 volatile int
字段进行原子更新。此类用于原子数据结构,该结构中同一节点的几个字段都独立受原子更新控制。
注意,此类中 compareAndSet
方法的保证弱于其他原子类中该方法的保证。因为此类不能确保所有使用的字段都适合于原子访问目的,所以对于相同更新器上的 compareAndSet
和 set
的其他调用,它仅可以保证原子性和可变语义。
2.构造函数详解
AtomicIntegerFieldUpdater
protected AtomicIntegerFieldUpdater()
受保护的无操作构造方法,供子类使用。
3.方法详解
newUpdater
public static <U> AtomicIntegerFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)
- 使用给定字段为对象创建和返回一个更新器。需要 Class 参数来检查反射类型和一般类型是否匹配。
- 参数:
tclass
- 保持字段的对象类fieldName
- 要更新的字段名称- 返回:
- 更新器
- 抛出:
IllegalArgumentException
- 如果该字段不是可变的整数类型RuntimeException
- 如果该类不保持字段,或者是错误的类型,则抛出 RuntimeException 和一个嵌套的基于反射的异常
compareAndSet
public abstract boolean compareAndSet(T obj, int expect, int update)
- 如果当前值
==
预期值,则以原子方式将此更新器所管理的给定对象的字段值设置为给定的更新值。对compareAndSet
和set
的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性。 - 参数:
obj
- 有条件地设置其字段的对象expect
- 预期值update
- 新值- 返回:
- 如果成功,则返回 true
- 抛出:
ClassCastException
- 如果obj
不是类的实例(该类处理在构造方法中建立的字段)
weakCompareAndSet
public abstract boolean weakCompareAndSet(T obj, int expect, int update)
- 如果当前值
==
预期值,则以原子方式将此更新器所管理的给定对象的字段值设置为给定的更新值。对compareAndSet
和set
的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性,并且可能会意外失败。可能意外失败并且不提供排序保证,所以只有在很少的情况下才对
compareAndSet
进行适当地选择。 - 参数:
obj
- 有条件地设置其字段的对象expect
- 预期值update
- 新值- 返回:
- 如果成功,则返回 true
- 抛出:
ClassCastException
- 如果obj
不是类的实例(该类处理在构造方法中建立的字段)
set
public abstract void set(T obj, int newValue)
- 将此更新器管理的给定对象的字段设置为给定更新值。对于
compareAndSet
的后续调用,此操作可以确保充当可变存储。 - 参数:
obj
- 要设置其字段的对象newValue
- 新值
lazySet
public abstract void lazySet(T obj, int newValue)
- 最后将此更新器管理的给定对象的字段设置为给定更新值。
- 参数:
obj
- 要设置其字段的对象newValue
- 新值- 从以下版本开始:
- 1.6
get
public abstract int get(T obj)
- 获取此更新器管理的在给定对象的字段中保持的当前值。
- 参数:
obj
- 要获取其字段的对象- 返回:
- 当前值
getAndSet
public int getAndSet(T obj, int newValue)
- 以原子方式将此更新器管理的给定对象的字段设置为给定值,并返回旧值。
- 参数:
obj
- 要获取并设置其字段的对象newValue
- 新值- 返回:
- 以前的值
getAndIncrement
public int getAndIncrement(T obj)
- 以原子方式将此更新器管理的给定对象的当前值加 1。
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 以前的值
getAndDecrement
public int getAndDecrement(T obj)
- 以原子方式将此更新器管理的给定对象的当前值减 1。
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 以前的值
getAndAdd
public int getAndAdd(T obj, int delta)
- 以原子方式将给定值添加到此更新器管理的给定对象的当前值。
- 参数:
obj
- 要获取并设置其字段的对象delta
- 要加上的值- 返回:
- 以前的值
incrementAndGet
public int incrementAndGet(T obj)
- 以原子方式将此更新器管理的给定对象的字段的当前值加 1。
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 更新的值
decrementAndGet
public int decrementAndGet(T obj)
- 以原子方式将此更新器管理的给定对象的字段的当前值减 1。
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 更新的值
addAndGet
public int addAndGet(T obj, int delta)
- 以原子方式将给定值添加到此更新器管理的给定对象的字段当前值。
- 参数:
obj
- 要获取并设置其字段的对象delta
- 要加上的值- 返回:
- 更新的值