java.lang.Object
java.util.concurrent.atomic.AtomicIntegerFieldUpdater<T>
- 类型参数:
T- 持有可更新字段的对象的类型
一种基于反射的实用程序,可以对指定类的指定
volatile int 字段进行原子更新。此类设计用于原子数据结构,其中同一节点的多个字段独立地进行原子更新。
请注意,此类中 compareAndSet 方法的保证比其他原子类中的要弱。因为此类不能确保该字段的所有使用都适合原子访问的目的,所以它只能保证在同一更新程序上对 compareAndSet 和 set 的其他调用的原子性。
T 类型参数的对象参数不是传递给 newUpdater(java.lang.Class<U>, java.lang.String) 的类的实例,将导致抛出 ClassCastException 。
- 自从:
- 1.5
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述final intaccumulateAndGet(T obj, int x, IntBinaryOperator accumulatorFunction) 以原子方式更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,以及将给定函数应用于当前值和给定值的结果,返回更新后的值。int以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。abstract booleancompareAndSet(T obj, int expect, int update) 如果当前值==预期值,则以原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。intdecrementAndGet(T obj) 以原子方式将由此更新程序管理的给定对象的字段的当前值减一。abstract int返回此更新程序管理的给定对象的字段中保存的当前值。final intgetAndAccumulate(T obj, int x, IntBinaryOperator accumulatorFunction) 原子地更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,其结果是将给定函数应用于当前值和给定值,返回先前的值。int以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。intgetAndDecrement(T obj) 以原子方式将由此更新程序管理的给定对象的字段的当前值减一。intgetAndIncrement(T obj) 以原子方式将由此更新程序管理的给定对象的字段的当前值递增 1。int以原子方式将此更新程序管理的给定对象的字段设置为给定值并返回旧值。final intgetAndUpdate(T obj, IntUnaryOperator updateFunction) 使用给定函数的应用结果原子地更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,返回先前的值。intincrementAndGet(T obj) 以原子方式将由此更新程序管理的给定对象的字段的当前值递增 1。abstract void最终将此更新程序管理的给定对象的字段设置为给定的更新值。static <U> AtomicIntegerFieldUpdater<U>newUpdater(Class<U> tclass, String fieldName) 为具有给定字段的对象创建并返回更新程序。abstract void将此更新程序管理的给定对象的字段设置为给定的更新值。final intupdateAndGet(T obj, IntUnaryOperator updateFunction) 使用给定函数的应用结果原子地更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,返回更新后的值。abstract booleanweakCompareAndSet(T obj, int expect, int update) 如果当前值==预期值,则以原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。
-
构造方法详细信息
-
AtomicIntegerFieldUpdater
protected AtomicIntegerFieldUpdater()受保护的无为构造方法供子类使用。
-
-
方法详情
-
newUpdater
为具有给定字段的对象创建并返回更新程序。需要 Class 参数来检查反射类型和泛型类型是否匹配。- 类型参数:
U- tclass 的实例类型- 参数:
tclass- 持有该字段的对象的类fieldName- 要更新的字段名称- 返回:
- 更新程序
- 抛出:
IllegalArgumentException- 如果字段不是可变整数类型RuntimeException- 如果类不包含字段或类型错误,或者根据 Java 语言访问控制,调用者无法访问该字段,则出现基于反射的嵌套异常
-
compareAndSet
如果当前值==预期值,则以原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。此方法保证相对于对compareAndSet和set的其他调用是原子的,但不一定相对于该字段中的其他更改。- 参数:
obj- 要有条件地设置其字段的对象expect- 期望值update- 新值- 返回:
true如果成功
-
weakCompareAndSet
如果当前值==预期值,则以原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。此方法保证相对于对compareAndSet和set的其他调用是原子的,但不一定相对于该字段中的其他更改。此操作可能会虚假地失败并且不提供排序保证,因此很少是
compareAndSet的合适替代方案。- 参数:
obj- 要有条件地设置其字段的对象expect- 期望值update- 新值- 返回:
true如果成功
-
set
将此更新程序管理的给定对象的字段设置为给定的更新值。对于compareAndSet的后续调用,此操作保证充当易失性存储。- 参数:
obj- 要设置其字段的对象newValue- 新值
-
lazySet
最终将此更新程序管理的给定对象的字段设置为给定的更新值。- 参数:
obj- 要设置其字段的对象newValue- 新值- 自从:
- 1.6
-
get
返回此更新程序管理的给定对象的字段中保存的当前值。- 参数:
obj- 要获取其字段的对象- 返回:
- 当前值
-
getAndSet
以原子方式将此更新程序管理的给定对象的字段设置为给定值并返回旧值。- 参数:
obj- 要获取和设置其字段的对象newValue- 新值- 返回:
- 以前的值
-
getAndIncrement
以原子方式将由此更新程序管理的给定对象的字段的当前值递增 1。- 参数:
obj- 要获取和设置其字段的对象- 返回:
- 以前的值
-
getAndDecrement
以原子方式将由此更新程序管理的给定对象的字段的当前值减一。- 参数:
obj- 要获取和设置其字段的对象- 返回:
- 以前的值
-
getAndAdd
以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。- 参数:
obj- 要获取和设置其字段的对象delta- 要添加的值- 返回:
- 以前的值
-
incrementAndGet
以原子方式将由此更新程序管理的给定对象的字段的当前值递增 1。- 参数:
obj- 要获取和设置其字段的对象- 返回:
- 更新值
-
decrementAndGet
以原子方式将由此更新程序管理的给定对象的字段的当前值减一。- 参数:
obj- 要获取和设置其字段的对象- 返回:
- 更新值
-
addAndGet
以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。- 参数:
obj- 要获取和设置其字段的对象delta- 要添加的值- 返回:
- 更新值
-
getAndUpdate
使用给定函数的应用结果原子地更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,返回先前的值。该函数应该是无副作用的,因为当由于线程之间的争用而尝试更新失败时,它可能会被重新应用。- 参数:
obj- 要获取和设置其字段的对象updateFunction- 无副作用的函数- 返回:
- 以前的值
- 自从:
- 1.8
-
updateAndGet
使用给定函数的应用结果原子地更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,返回更新后的值。该函数应该是无副作用的,因为当由于线程之间的争用而尝试更新失败时,它可能会被重新应用。- 参数:
obj- 要获取和设置其字段的对象updateFunction- 无副作用的函数- 返回:
- 更新值
- 自从:
- 1.8
-
getAndAccumulate
原子地更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,其结果是将给定函数应用于当前值和给定值,返回先前的值。该函数应该是无副作用的,因为当由于线程之间的争用而尝试更新失败时,它可能会被重新应用。该函数应用当前值作为其第一个参数,给定的更新作为第二个参数。- 参数:
obj- 要获取和设置其字段的对象x- 更新值accumulatorFunction- 两个参数的无副作用函数- 返回:
- 以前的值
- 自从:
- 1.8
-
accumulateAndGet
以原子方式更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由该更新程序管理的给定对象的字段,以及将给定函数应用于当前值和给定值的结果,返回更新后的值。该函数应该是无副作用的,因为当由于线程之间的争用而尝试更新失败时,它可能会被重新应用。该函数应用当前值作为其第一个参数,给定的更新作为第二个参数。- 参数:
obj- 要获取和设置其字段的对象x- 更新值accumulatorFunction- 两个参数的无副作用函数- 返回:
- 更新值
- 自从:
- 1.8
-