JavaTM 2 Platform
Standard Ed. 5.0

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 方法的保证弱于其他原子类中该方法的保证。因为此类不能确保所有使用的字段都适合于原子访问目的,所以对于 compareAndSetset 的其他调用,它仅可以保证原子性和可变语义。

从以下版本开始:
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
<U> AtomicLongFieldUpdater<U>
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)
如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。对 compareAndSetset 的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性。

参数:
obj - 有条件地设置其字段的对象
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。
抛出:
ClassCastException - 如果 obj 不是类的实例(该类处理在构造方法中建立的字段)。

weakCompareAndSet

public abstract boolean weakCompareAndSet(T obj,
                                          long expect,
                                          long update)
如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。对 compareAndSetset 的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性,并且可能会意外失败。

参数:
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 - 要获取并设置其字段的对象
返回:
以前的值;

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 - 要加上的值
返回:
更新的值;

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策