• java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdater<T>


    1.类 AtomicLongFieldUpdater<T>

      public abstract class AtomicLongFieldUpdater<T> extends Object

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

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

    2.构造函数详解

      AtomicLongFieldUpdater

        protected AtomicLongFieldUpdater()

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

    3.方法详解

    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 的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性。

    可能意外失败并且不提供排序保证,所以只有在很少的情况下才对 compareAndSet 进行适当地选择。

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

    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 - 要添加的值
    返回:
    更新的值
  • 相关阅读:
    JDBC原理
    练习 map集合被使用是因为具备映射关系 "进度班" "01" "张三" "进度班" "02" "李四" "J1701" "01" "王五" "J1701" "02" "王二" 此信息中,我们要怎样把上述信息装入集合中, 根据班级信息的到所有的所有信
    练习 HashSet 去重复
    集合练习 练习:每一个学生Student都有一个对应的归属地定义为String类型。学生属性:姓名,年龄 注意:姓名和年龄相同的视为同一个学生。保证学生的唯一性。 1、描述学生。 2、定义Map容器,将学生作为键,地址作为值存入集合中。 3、获取Map中的元素并进行排序。
    Java学习之Iterator(迭代器)的一般用法 (转)
    int 跟 Integer 的关系
    第十节 集合类Collection和Map
    类 Arrays StringBuilder 跟 StringBuffer 的异同 SimpleDateFormat
    数字转成字母型
    nginx之206异常
  • 原文地址:https://www.cnblogs.com/tonylovett/p/5254713.html
Copyright © 2020-2023  润新知