- java.lang.Object
-
- java.util.concurrent.atomic.AtomicLongFieldUpdater<T>
-
- 参数类型
-
T
- 持有可更新字段的对象的类型
public abstract class AtomicLongFieldUpdater<T> extends Object
基于反射的实用程序,可以对指定类的指定的volatile long
字段进行原子更新。 该类设计用于原子数据结构,其中同一节点的多个字段独立受原子更新的影响。请注意,
compareAndSet
中的compareAndSet
方法的保证弱于其他原子类。 因为这个类不能确保该字段的所有用途都适用于原子访问的目的,所以它可以保证在相同更新程序上的compareAndSet
和set
其他调用的原子性。类型为
T
参数的对象参数不是传递给newUpdater(java.lang.Class<U>, java.lang.String)
的类的实例将导致抛出ClassCastException
。- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
AtomicLongFieldUpdater()
受保护的do-nothing构造函数供子类使用。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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(Class<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(Class<U> tclass, String fieldName)
创建并返回具有给定字段的对象的更新程序。 需要Class参数来检查反射类型和泛型类型是否匹配。- 参数类型
-
U
- tclass的实例的类型 - 参数
-
tclass
- 持有该字段的对象的类 -
fieldName
- 要更新的字段的名称 - 结果
- 更新者
- 异常
-
IllegalArgumentException
- 如果字段不是易失性长类型 -
RuntimeException
- 如果类不保留字段或错误的类型,或者根据Java语言访问控制,该调用者无法访问该字段,RuntimeException
使用嵌套的基于反射的异常
-
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
。- 参数
-
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
-
-