| |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.util.concurrent.atomic
类 AtomicLongFieldUpdater<T>
java.lang.Object java.util.concurrent.atomic.AtomicLongFieldUpdater<T>
- 类型参数:
T
- 保持可更新字段的对象类型。
public abstract class AtomicLongFieldUpdater<T>
- extends Object
基于反射的实用工具,可以对指定类的指定 volatile long 字段进行原子更新。此类用于原子数据结构,该结构中同一节点的几个字段都独立受原子更新控制。
注意,此类中 compareAndSet 方法的保证弱于其他原子类中该方法的保证。因为此类不能确保所有使用的字段都适合于原子访问目的,所以对于 compareAndSet 和 set 的其他调用,它仅可以保证原子性和可变语义。
- 从以下版本开始:
- 1.5
构造方法摘要 | |
---|---|
protected | AtomicLongFieldUpdater() 受保护的无操作构造方法,供子类使用。 |
方法摘要 | ||
---|---|---|
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 | getAndAdd(T obj, long delta) 以原子方式将给定值与当前值相加。 | |
long | getAndDecrement(T obj) 以原子方式将当前值减 1。 | |
long | getAndIncrement(T obj) 以原子方式将当前值加 1。 | |
long | getAndSet(T obj, long newValue) 设置为给定值,并返回旧值。 | |
long | incrementAndGet(T obj) 以原子方式将当前值加 1。 | |
static | newUpdater(Class<U> tclass, String fieldName) 使用给定的字段为对象创建一个更新程序。 | |
abstract void | set(T obj, long newValue) 设置由此更新程序管理的给定对象的字段。 | |
abstract boolean | weakCompareAndSet(T obj, long expect, long update) 如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
AtomicLongFieldUpdater
protected AtomicLongFieldUpdater()
- 受保护的无操作构造方法,供子类使用。
方法详细信息 |
---|
newUpdater
public static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)
- 使用给定的字段为对象创建一个更新程序。需要 Class 参数检查反射类型和一般类型是否匹配。
- 参数:
tclass
- 保持字段的对象类fieldName
- 要更新的字段名称。- 返回:
- 更新程序
- 抛出:
IllegalArgumentException
- 如果该字段不是可变的 long 类型。RuntimeException
- 如果该类不保持字段,或者是错误的类型,将抛出 RuntimeException 和一个嵌套的基于反射的异常。
compareAndSet
public abstract boolean compareAndSet(T obj, long expect, long update)
- 如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。对 compareAndSet 和 set 的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性。
- 参数:
obj
- 有条件地设置其字段的对象expect
- 预期值update
- 新值- 返回:
- 如果成功,则返回 true。
- 抛出:
ClassCastException
- 如果 obj 不是类的实例(该类处理在构造方法中建立的字段)。
weakCompareAndSet
public abstract boolean weakCompareAndSet(T obj, long expect, long update)
- 如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。对 compareAndSet 和 set 的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性,并且可能会意外失败。
- 参数:
obj
- 有条件地设置其字段的对象expect
- 预期值update
- 新值- 返回:
- 如果成功,则返回 true。
- 抛出:
ClassCastException
- 如果 obj 不是类的实例(该类处理在构造方法中建立的字段)。
set
public abstract void set(T obj, long newValue)
- 设置由此更新程序管理的给定对象的字段。对于 compareAndSet 的后续调用,此操作可以确保充当可变存储。
- 参数:
obj
- 要设置其字段的对象newValue
- 新值
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
- 要获取并设置其字段的对象- 返回:
- 以前的值;