返回介绍

java.util.concurrent.atomic 类 AtomicLongFieldUpdater<T>

发布于 2019-10-04 09:51:48 字数 8638 浏览 812 评论 0 收藏 0

java.lang.Object
  └java.util.concurrent.atomic.AtomicLongFieldUpdater<T>
类型参数:
T - 保持可更新字段的对象类型。

public abstract class AtomicLongFieldUpdater<T>
extends Object
 

基于反射的实用工具,可以对指定类的指定 volatile long 字段进行原子更新。此类用于原子数据结构,该结构中同一节点的几个字段都独立受原子更新控制。

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

从以下版本开始:
1.5

构造方法摘要
protectedAtomicLongFieldUpdater()

受保护的无操作构造方法,供子类使用。

方法摘要
longaddAndGet(Tobj, longdelta)

以原子方式将给定值与当前值相加。

abstract booleancompareAndSet(Tobj, longexpect, longupdate)

如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。

longdecrementAndGet(Tobj)

以原子方式将当前值减 1。

abstract longget(Tobj)

获取由给定对象在字段中保持的当前值。

longgetAndAdd(Tobj, longdelta)

以原子方式将给定值与当前值相加。

longgetAndDecrement(Tobj)

以原子方式将当前值减 1。

longgetAndIncrement(Tobj)

以原子方式将当前值加 1。

longgetAndSet(Tobj, longnewValue)

设置为给定值,并返回旧值。

longincrementAndGet(Tobj)

以原子方式将当前值加 1。

static
<U> AtomicLongFieldUpdater<U>
newUpdater(Class<U>tclass, StringfieldName)

使用给定的字段为对象创建一个更新程序。

abstract voidset(Tobj, longnewValue)

设置由此更新程序管理的给定对象的字段。

abstract booleanweakCompareAndSet(Tobj, longexpect, longupdate)

如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。

从类 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,
                                                       StringfieldName)
使用给定的字段为对象创建一个更新程序。需要 Class 参数检查反射类型和一般类型是否匹配。
参数:
tclass - 保持字段的对象类
fieldName - 要更新的字段名称。
返回:
更新程序
抛出:
IllegalArgumentException - 如果该字段不是可变的 long 类型。
RuntimeException - 如果该类不保持字段,或者是错误的类型,将抛出 RuntimeException 和一个嵌套的基于反射的异常。

compareAndSet

public abstract boolean compareAndSet(Tobj,
                                      longexpect,
                                      longupdate)
如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。对 compareAndSetset 的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性。
参数:
obj - 有条件地设置其字段的对象
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。
抛出:
ClassCastException - 如果 obj 不是类的实例(该类处理在构造方法中建立的字段)。

weakCompareAndSet

public abstract boolean weakCompareAndSet(Tobj,
                                          longexpect,
                                          longupdate)
如果当前值 == 预期值,则以原子方式将此更新程序所管理的给定对象的字段值设置为给定的更新值。对 compareAndSetset 的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性,并且可能会意外失败。
参数:
obj - 有条件地设置其字段的对象
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。
抛出:
ClassCastException - 如果 obj 不是类的实例(该类处理在构造方法中建立的字段)。

set

public abstract void set(Tobj,
                         longnewValue)
设置由此更新程序管理的给定对象的字段。对于 compareAndSet 的后续调用,此操作可以确保充当可变存储。
参数:
obj - 要设置其字段的对象
newValue - 新值

get

public abstract long get(Tobj)
获取由给定对象在字段中保持的当前值。
参数:
obj - 要获取其字段的对象
返回:
当前值

getAndSet

public long getAndSet(Tobj,
                      longnewValue)
设置为给定值,并返回旧值。
参数:
obj - 要获取并设置其字段的对象
newValue - 新值
返回:
以前的值

getAndIncrement

public long getAndIncrement(Tobj)
以原子方式将当前值加 1。
参数:
obj - 要获取并设置其字段的对象
返回:
以前的值;

getAndDecrement

public long getAndDecrement(Tobj)
以原子方式将当前值减 1。
参数:
obj - 要获取并设置其字段的对象
返回:
以前的值;

getAndAdd

public long getAndAdd(Tobj,
                      longdelta)
以原子方式将给定值与当前值相加。
参数:
obj - 要获取并设置其字段的对象
delta - 要加上的值
返回:
以前的值;

incrementAndGet

public long incrementAndGet(Tobj)
以原子方式将当前值加 1。
参数:
obj - 要获取并设置其字段的对象
返回:
更新的值;

decrementAndGet

public long decrementAndGet(Tobj)
以原子方式将当前值减 1。
参数:
obj - 要获取并设置其字段的对象
返回:
更新的值;

addAndGet

public long addAndGet(Tobj,
                      longdelta)
以原子方式将给定值与当前值相加。
参数:
obj - 要获取并设置其字段的对象
delta - 要加上的值
返回:
更新的值;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文