- java.lang.Object
-
- java.util.concurrent.atomic.AtomicIntegerFieldUpdater<T>
-
- 参数类型
-
T
- 持有可更新字段的对象的类型
public abstract class AtomicIntegerFieldUpdater<T> extends Object
基于反射的实用程序,可以对指定类的指定volatile int
字段进行原子更新。 该类设计用于原子数据结构,其中同一节点的多个字段独立受原子更新的影响。请注意,
compareAndSet
中的compareAndSet
方法的保证弱于其他原子类。 因为这个类不能确保该字段的所有用途都适用于原子访问的目的,所以它可以保证原子性仅在相同更新set
上的compareAndSet
和set
其他调用。类型为
T
参数的对象参数不是传递给newUpdater(java.lang.Class<U>, java.lang.String)
的类的实例将导致抛出ClassCastException
。- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
AtomicIntegerFieldUpdater()
受保护的do-nothing构造函数供子类使用。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 int
accumulateAndGet(T obj, int x, IntBinaryOperator accumulatorFunction)
原子更新(由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回更新后的值。int
addAndGet(T obj, int delta)
将给定值原子地添加到由此更新程序管理的给定对象的字段的当前值。abstract boolean
compareAndSet(T obj, int expect, int update)
如果当前值为==
,则将由此更新程序管理的给定对象的字段原子设置为给定的更新值。int
decrementAndGet(T obj)
由该更新程序管理的给定对象的字段的当前值原子减1。abstract int
get(T obj)
返回由此更新程序管理的给定对象的字段中保留的当前值。int
getAndAccumulate(T obj, int x, IntBinaryOperator accumulatorFunction)
原始更新(由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回上一个值。int
getAndAdd(T obj, int delta)
将给定值原子地添加到由此更新程序管理的给定对象的字段的当前值。int
getAndDecrement(T obj)
由该更新程序管理的给定对象的字段的当前值原子减1。int
getAndIncrement(T obj)
由此更新程序管理的给定对象的字段的当前值以原子方式递增1。int
getAndSet(T obj, int newValue)
将由此更新程序管理的给定对象的字段原子设置为给定值,并返回旧值。int
getAndUpdate(T obj, IntUnaryOperator updateFunction)
原始更新(由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段与应用给定函数的结果,返回上一个值。int
incrementAndGet(T obj)
由此更新程序管理的给定对象的字段的当前值以原子方式递增1。abstract void
lazySet(T obj, int newValue)
最终将由此更新程序管理的给定对象的字段设置为给定的更新值。static <U> AtomicIntegerFieldUpdater<U>
newUpdater(Class<U> tclass, String fieldName)
创建并返回具有给定字段的对象的更新程序。abstract void
set(T obj, int newValue)
将由此更新程序管理的给定对象的字段设置为给定的更新值。int
updateAndGet(T obj, IntUnaryOperator updateFunction)
通过应用给定函数的结果,原子更新(由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,返回更新的值。abstract boolean
weakCompareAndSet(T obj, int expect, int update)
如果当前值为==
,则将由此更新程序管理的给定对象的字段设置为给定的更新值。
-
-
-
方法详细信息
-
newUpdater
public static <U> AtomicIntegerFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)
创建并返回具有给定字段的对象的更新程序。 需要Class参数来检查反射类型和泛型类型是否匹配。- 参数类型
-
U
- tclass的实例类型 - 参数
-
tclass
- 持有该字段的对象的类 -
fieldName
- 要更新的字段的名称 - 结果
- 更新者
- 异常
-
IllegalArgumentException
- 如果该字段不是易失性整数类型 -
RuntimeException
- 如果类不保存字段或错误的类型,或者根据Java语言访问控制,该调用者不可访问该字段,则基于反射的嵌套异常
-
compareAndSet
public abstract boolean compareAndSet(T obj, int expect, int update)
如果当前值==
为预期值,则将由此更新程序管理的给定对象的字段原子设置为给定的更新值。 相对于其他对compareAndSet
和set
调用,该方法保证是原子的,但不一定与本领域的其他更改相关。- 参数
-
obj
- 有条件地设置其字段的对象 -
expect
- 预期值 -
update
- 新值 - 结果
-
true
如果成功
-
weakCompareAndSet
public abstract boolean weakCompareAndSet(T obj, int expect, int update)
如果当前值==
为预期值,则将由此更新程序管理的给定对象的字段原子设置为给定的更新值。 相对于其他对compareAndSet
和set
调用,该方法保证是原子的,但不一定与本领域的其他更改相关。May fail spuriously and does not provide ordering guarantees ,所以很少是
compareAndSet
的适当替代compareAndSet
。- 参数
-
obj
- 有条件地设置其字段的对象 -
expect
- 期望值 -
update
- 新值 - 结果
-
true
如果成功
-
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
- 要添加的值 - 结果
- 更新的值
-
getAndUpdate
public final int getAndUpdate(T obj, IntUnaryOperator updateFunction)
原始更新(具有VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段与应用给定函数的结果,返回上一个值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。- 参数
-
obj
- 要获取和设置的字段的对象 -
updateFunction
- 无副作用的功能 - 结果
- 以前的值
- 从以下版本开始:
- 1.8
-
updateAndGet
public final int updateAndGet(T obj, IntUnaryOperator updateFunction)
通过应用给定函数的结果对由该更新程序管理的给定对象的字段进行原子更新(具有VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果),返回更新的值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。- 参数
-
obj
- 要获取和设置的字段的对象 -
updateFunction
- 无副作用的功能 - 结果
- 更新的值
- 从以下版本开始:
- 1.8
-
getAndAccumulate
public final int getAndAccumulate(T obj, int x, IntBinaryOperator accumulatorFunction)
原始更新(由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回上一个值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。 该函数应用当前值作为其第一个参数,给定的更新作为第二个参数。- 参数
-
obj
- 要获取和设置的字段的对象 -
x
- 更新值 -
accumulatorFunction
- 两个参数的无副作用函数 - 结果
- 以前的值
- 从以下版本开始:
- 1.8
-
accumulateAndGet
public final int accumulateAndGet(T obj, int x, IntBinaryOperator accumulatorFunction)
原始更新(由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效应)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回更新后的值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。 该函数应用当前值作为其第一个参数,给定的更新作为第二个参数。- 参数
-
obj
- 一个要获取和设置的字段的对象 -
x
- 更新值 -
accumulatorFunction
- 两个参数的无效副作用 - 结果
- 更新的值
- 从以下版本开始:
- 1.8
-
-