Module  java.base

Class AtomicLongFieldUpdater<T>

  • 参数类型
    T - 持有可更新字段的对象的类型


    public abstract class AtomicLongFieldUpdater<T>
    extends Object
    基于反射的实用程序,可以对指定类的指定的volatile long字段进行原子更新。 该类设计用于原子数据结构,其中同一节点的多个字段独立受原子更新的影响。

    请注意, compareAndSet中的compareAndSet方法的保证弱于其他原子类。 因为这个类不能确保该字段的所有用途都适用于原子访问的目的,所以它可以保证在相同更新程序上的compareAndSetset其他调用的原子性。

    类型为T参数的对象参数不是传递给newUpdater(java.lang.Class<U>, java.lang.String)的类的实例将导致抛出ClassCastException

    从以下版本开始:
    1.5
    • 构造方法摘要

      构造方法  
      Modifier Constructor 描述
      protected AtomicLongFieldUpdater​()
      受保护的do-nothing构造函数供子类使用。
    • 方法摘要

      所有方法  静态方法  接口方法  抽象方法  具体的方法 
      Modifier and Type 方法 描述
      long accumulateAndGet​(T obj, long x, LongBinaryOperator accumulatorFunction)
      原始更新(由 VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回更新后的值。
      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 getAndAccumulate​(T obj, long x, LongBinaryOperator accumulatorFunction)
      原始更新(由 VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回上一个值。
      long getAndAdd​(T obj, long delta)
      将给定值原子地添加到由此更新程序管理的给定对象的字段的当前值。
      long getAndDecrement​(T obj)
      由该更新程序管理的给定对象的字段的当前值原子减1。
      long getAndIncrement​(T obj)
      由此更新程序管理的给定对象的字段的当前值以原子方式递增1。
      long getAndSet​(T obj, long newValue)
      将由此更新程序管理的给定对象的字段原子设置为给定值,并返回旧值。
      long getAndUpdate​(T obj, LongUnaryOperator updateFunction)
      原始更新(由 VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新器管理的给定对象的字段与应用给定函数的结果,返回上一个值。
      long incrementAndGet​(T obj)
      由此更新程序管理的给定对象的字段的当前值以原子方式递增1。
      abstract void lazySet​(T obj, long newValue)
      最终将由此更新程序管理的给定对象的字段设置为给定的更新值。
      static <U> AtomicLongFieldUpdater<U> newUpdater​(Class<U> tclass, String fieldName)
      创建并返回具有给定字段的对象的更新程序。
      abstract void set​(T obj, long newValue)
      将由此更新程序管理的给定对象的字段设置为给定的更新值。
      long updateAndGet​(T obj, LongUnaryOperator updateFunction)
      原始更新(具有 VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段与应用给定函数的结果,返回更新的值。
      abstract boolean weakCompareAndSet​(T obj, long expect, long update)
      如果当前值为 == ,则将此更新程序管理的给定对象的字段原子设置为给定的更新值。
    • 构造方法详细信息

      • AtomicLongFieldUpdater

        protected AtomicLongFieldUpdater​()
        受保护的do-nothing构造函数供子类使用。
    • 方法详细信息

      • newUpdater

        public static <U> AtomicLongFieldUpdater<U> newUpdater​(Class<U> tclass,
                                                               String fieldName)
        创建并返回具有给定字段的对象的更新程序。 需要Class参数来检查反射类型和泛型类型是否匹配。
        参数类型
        U - tclass的实例的类型
        参数
        tclass - 持有该字段的对象的类
        fieldName - 要更新的字段的名称
        结果
        更新者
        异常
        IllegalArgumentException - 如果字段不是易失性长类型
        RuntimeException - 如果类不保留字段或错误的类型,或者根据Java语言访问控制,该调用者无法访问该字段, RuntimeException使用嵌套的基于反射的异常
      • compareAndSet

        public abstract boolean compareAndSet​(T obj,
                                              long expect,
                                              long update)
        如果当前值==为预期值,则将由此更新程序管理的给定对象的字段原子设置为给定的更新值。 相对于其他对compareAndSetset调用,该方法保证是原子的,但不一定与本领域的其他更改相关。
        参数
        obj - 有条件设置字段的对象
        expect - 期望值
        update - 新值
        结果
        true如果成功
      • weakCompareAndSet

        public abstract boolean weakCompareAndSet​(T obj,
                                                  long expect,
                                                  long update)
        如果当前值==为预期值,则将由此更新程序管理的给定对象的字段原子设置为给定的更新值。 相对于其他对compareAndSetset调用,该方法保证是原子的,但不一定与该字段中的其他更改相关。

        May fail spuriously and does not provide ordering guarantees ,所以很少适合替代compareAndSet

        参数
        obj - 有条件地设置其字段的对象
        expect - 预期值
        update - 新值
        结果
        true如果成功
      • 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 - 要添加的值
        结果
        更新的值
      • getAndUpdate

        public final long getAndUpdate​(T obj,
                                       LongUnaryOperator updateFunction)
        原子更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段与应用给定函数的结果,返回上一个值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。
        参数
        obj - 要获取和设置的字段的对象
        updateFunction - 无副作用的功能
        结果
        以前的值
        从以下版本开始:
        1.8
      • updateAndGet

        public final long updateAndGet​(T obj,
                                       LongUnaryOperator updateFunction)
        原子更新(具有VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段与应用给定函数的结果,返回更新的值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。
        参数
        obj - 一个要获取和设置的字段的对象
        updateFunction - 无副作用的功能
        结果
        更新的值
        从以下版本开始:
        1.8
      • getAndAccumulate

        public final long getAndAccumulate​(T obj,
                                           long x,
                                           LongBinaryOperator accumulatorFunction)
        原始更新(由VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回上一个值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。 该函数应用当前值作为其第一个参数,给定的更新作为第二个参数。
        参数
        obj - 要获取和设置的字段的对象
        x - 更新值
        accumulatorFunction - 两个参数的无副作用的函数
        结果
        以前的值
        从以下版本开始:
        1.8
      • accumulateAndGet

        public final long accumulateAndGet​(T obj,
                                           long x,
                                           LongBinaryOperator accumulatorFunction)
        原子更新(由VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段,并将给定函数应用于当前值和给定值,返回更新后的值。 该功能应该是无副作用的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。 该函数应用当前值作为其第一个参数,给定的更新作为第二个参数。
        参数
        obj - 一个要获取和设置的字段的对象
        x - 更新值
        accumulatorFunction - 两个参数的无副作用函数
        结果
        更新的值
        从以下版本开始:
        1.8