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