java.lang.Object
java.util.concurrent.atomic.AtomicLongFieldUpdater<T>
- 类型参数:
-
T
- 持有可更新字段的对象的类型
一个基于反射的实用程序,可使指定类的指定
volatile long
字段的原子更新成为可能。此类设计用于原子数据结构,其中同一节点的多个字段独立地受原子更新的影响。
请注意,此类中compareAndSet
方法的保证要弱于其他原子类。因为此类无法确保字段的所有用法都适合于原子访问的目的,所以它只能保证相对于同一更新程序的其他compareAndSet
和set
调用的原子性。
对于不是传递给newUpdater(java.lang.Class<U>, java.lang.String)
的类的实例的类型T
参数的对象将导致抛出ClassCastException
。
- 自 JDK 版本:
- 1.5
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionfinal long
accumulateAndGet
(T obj, long x, LongBinaryOperator accumulatorFunction) 原子地更新(具有由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,使用给定函数对当前值和给定值应用结果,返回更新后的值。long
原子地将给定值添加到由此更新程序管理的给定对象的字段的当前值。abstract boolean
compareAndSet
(T obj, long expect, long update) 如果当前值==
期望值,则将由此更新程序管理的给定对象的字段原子地设置为给定的更新值。long
decrementAndGet
(T obj) 原子地将由此更新程序管理的给定对象的字段的当前值减少一。abstract long
返回由此更新程序管理的给定对象的字段中保存的当前值。final long
getAndAccumulate
(T obj, long x, LongBinaryOperator accumulatorFunction) 原子地更新(具有由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,使用给定函数对当前值和给定值应用结果,返回先前的值。long
原子地将给定值添加到由此更新程序管理的给定对象的字段的当前值。long
getAndDecrement
(T obj) 原子地将由此更新程序管理的给定对象的字段的当前值减少一。long
getAndIncrement
(T obj) 原子地将由此更新程序管理的给定对象的字段的当前值增加一。long
原子地将由此更新程序管理的给定对象的字段设置为给定值,并返回旧值。final long
getAndUpdate
(T obj, LongUnaryOperator updateFunction) 原子地更新(具有由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,使用给定函数的结果,返回先前的值。long
incrementAndGet
(T obj) 原子地将由此更新程序管理的给定对象的字段的当前值增加一。abstract void
最终将由此更新程序管理的给定对象的字段设置为给定的更新值。static <U> AtomicLongFieldUpdater
<U> newUpdater
(Class<U> tclass, String fieldName) 创建并返回具有给定字段的更新程序。abstract void
将由此更新程序管理的给定对象的字段设置为给定的更新值。final long
updateAndGet
(T obj, LongUnaryOperator updateFunction) 原子地更新(具有由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,使用给定函数的结果,返回更新后的值。abstract boolean
weakCompareAndSet
(T obj, long expect, long update) 如果当前值==
期望值,则将由此更新程序管理的给定对象的字段原子地设置为给定的更新值。
-
Constructor Details
-
AtomicLongFieldUpdater
protected AtomicLongFieldUpdater()供子类使用的受保护的空构造函数。
-
-
Method Details
-
newUpdater
创建并返回具有给定字段的更新程序。需要Class参数以检查反射类型和泛型类型是否匹配。- 类型参数:
-
U
- tclass 的实例的类型 - 参数:
-
tclass
- 持有字段的对象的类 -
fieldName
- 要更新的字段的名称 - 返回:
- 更新程序
- 抛出:
-
IllegalArgumentException
- 如果字段不是volatile long类型 -
RuntimeException
- 如果类不包含字段或类型错误,或者根据Java语言访问控制,字段对调用者不可访问,则会抛出嵌套的基于反射的异常
-
compareAndSet
如果当前值==
期望值,则将由此更新程序管理的给定对象的字段原子地设置为给定的更新值。此方法保证相对于其他对compareAndSet
和set
的调用是原子的,但不一定相对于字段的其他更改是原子的。- 参数:
-
obj
- 要有条件设置字段的对象 -
expect
- 期望的值 -
update
- 新值 - 返回:
-
如果成功则返回
true
-
weakCompareAndSet
如果当前值==
期望值,则将由此更新程序管理的给定对象的字段原子地设置为给定的更新值。此方法保证相对于其他对compareAndSet
和set
的调用是原子的,但不一定相对于字段的其他更改是原子的。此操作可能会出现偶然失败,并且不提供排序保证,因此很少是对
compareAndSet
的适当替代方案。- 参数:
-
obj
- 要有条件设置字段的对象 -
expect
- 期望的值 -
update
- 新值 - 返回:
-
如果成功则返回
true
-
set
将由此更新程序管理的给定对象的字段设置为给定的更新值。此操作保证相对于后续对compareAndSet
的调用作为volatile存储。- 参数:
-
obj
- 要设置字段的对象 -
newValue
- 新值
-
lazySet
最终将由此更新程序管理的给定对象的字段设置为给定的更新值。- 参数:
-
obj
- 要设置字段的对象 -
newValue
- 新值 - 自 JDK 版本:
- 1.6
-
get
返回由此更新程序管理的给定对象的字段中保存的当前值。- 参数:
-
obj
- 要获取字段的对象 - 返回:
- 当前值
-
getAndSet
原子地将由此更新程序管理的给定对象的字段设置为给定值,并返回旧值。- 参数:
-
obj
- 要获取和设置字段的对象 -
newValue
- 新值 - 返回:
- 先前的值
-
getAndIncrement
原子地将由此更新程序管理的给定对象的字段的当前值增加一。- 参数:
-
obj
- 要获取和设置字段的对象 - 返回:
- 先前的值
-
getAndDecrement
原子地将由此更新程序管理的给定对象的字段的当前值减少一。- 参数:
-
obj
- 要获取和设置字段的对象 - 返回:
- 先前的值
-
getAndAdd
原子地将给定值添加到由此更新程序管理的给定对象的字段的当前值。- 参数:
-
obj
- 要获取和设置字段的对象 -
delta
- 要添加的值 - 返回:
- 先前的值
-
incrementAndGet
原子地将由此更新程序管理的给定对象的字段的当前值增加一。- 参数:
-
obj
- 要获取和设置字段的对象 - 返回:
- 更新后的值
-
decrementAndGet
原子地将由此更新程序管理的给定对象的字段的当前值减少一。- 参数:
-
obj
- 要获取和设置字段的对象 - 返回:
- 更新后的值
-
addAndGet
原子地将给定值添加到由此更新程序管理的给定对象的字段的当前值。- 参数:
-
obj
- 要获取和设置字段的对象 -
delta
- 要添加的值 - 返回:
- 更新后的值
-
getAndUpdate
原子地更新(具有由VarHandle.compareAndSet(java.lang.Object...)
指定的内存效果)由此更新程序管理的给定对象的字段,使用给定函数的结果,返回先前的值。由于在线程之间的争用导致尝试更新失败时可能会重新应用函数,因此函数应是无副作用的。- 参数:
-
obj
- 要获取和设置字段的对象 -
updateFunction
- 无副作用的函数 - 返回:
- 先前的值
- 自 JDK 版本:
- 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
-