模块  java.base

Class AtomicIntegerFieldUpdater<T>

  • 参数类型
    T - 包含可更新字段的对象的类型

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

    请注意, compareAndSet方法的保证比其他原子类弱。 因为此类无法确保该字段的所有使用都适用于原子访问的目的,所以它只能保证在同一更新程序上对compareAndSetset其他调用的原子性。

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

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

      构造方法  
      变量 构造器 描述
      protected AtomicIntegerFieldUpdater()
      受保护的无操作构造函数供子类使用。
    • 方法摘要

      所有方法  静态方法  实例方法 抽象方法  具体的方法 
      变量和类型 方法 描述
      int accumulateAndGet​(T obj, int x, IntBinaryOperator accumulatorFunction)
      原子更新(具有由 VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由此更新程序管理的给定对象的字段,以及将给定函数应用于当前值和给定值的结果,返回更新的值。
      int addAndGet​(T obj, int delta)
      以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。
      abstract boolean compareAndSet​(T obj, int expect, int update)
      如果当前值 ==是预期值, ==原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。
      int decrementAndGet​(T obj)
      原子地将此更新程序管理的给定对象的字段的当前值减1。
      abstract int get​(T obj)
      返回此更新程序管理的给定对象的字段中保存的当前值。
      int getAndAccumulate​(T obj, int x, IntBinaryOperator accumulatorFunction)
      原子更新(具有由 VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由此更新程序管理的给定对象的字段,其中将给定函数应用于当前值和给定值,返回先前值。
      int getAndAdd​(T obj, int delta)
      以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。
      int getAndDecrement​(T obj)
      原子地将此更新程序管理的给定对象的字段的当前值减1。
      int getAndIncrement​(T obj)
      原子地将此更新程序管理的给定对象的字段的当前值增加1。
      int getAndSet​(T obj, int newValue)
      以原子方式将此更新程序管理的给定对象的字段设置为给定值,并返回旧值。
      int getAndUpdate​(T obj, IntUnaryOperator updateFunction)
      原子地更新(具有由 VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由此更新程序管理的给定对象的字段以及应用给定函数的结果,返回先前的值。
      int incrementAndGet​(T obj)
      原子地将此更新程序管理的给定对象的字段的当前值增加1。
      abstract void lazySet​(T obj, int newValue)
      最终将此更新程序管理的给定对象的字段设置为给定的更新值。
      static <U> AtomicIntegerFieldUpdater<U> newUpdater​(<U> tclass, String fieldName)
      为具有给定字段的对象创建并返回更新程序。
      abstract void set​(T obj, int newValue)
      将此更新程序管理的给定对象的字段设置为给定的更新值。
      int updateAndGet​(T obj, IntUnaryOperator updateFunction)
      原子地更新(具有由 VarHandle.compareAndSet(java.lang.Object...)指定的记忆效应)由此更新程序管理的给定对象的字段以及应用给定函数的结果,返回更新的值。
      abstract boolean weakCompareAndSet​(T obj, int expect, int update)
      如果当前值 ==是预期值, ==原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。
    • 构造方法详细信息

      • AtomicIntegerFieldUpdater

        protected AtomicIntegerFieldUpdater()
        受保护的无操作构造函数供子类使用。
    • 方法详细信息

      • newUpdater

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

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

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

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

        参数
        obj - 要有条件地设置其字段的对象
        expect - 预期值
        update - 新值
        结果
        true如果成功
      • set

        public abstract void set​(T obj,                         int newValue)
        将此更新程序管理的给定对象的字段设置为给定的更新值。 保证此操作在后续调用compareAndSet充当易失性存储。
        参数
        obj - 要设置其字段的对象
        newValue - 新值
      • lazySet

        public abstract void lazySet​(T obj,                             int newValue)
        最终将此更新程序管理的给定对象的字段设置为给定的更新值。
        参数
        obj - 要设置其字段的对象
        newValue - 新值
        从以下版本开始:
        1.6
      • get

        public abstract int get​(T obj)
        返回此更新程序管理的给定对象的字段中保存的当前值。
        参数
        obj - 要获取其字段的对象
        结果
        当前的价值
      • getAndSet

        public int getAndSet​(T obj,                     int newValue)
        以原子方式将此更新程序管理的给定对象的字段设置为给定值,并返回旧值。
        参数
        obj - 要获取和设置其字段的对象
        newValue - 新值
        结果
        以前的值
      • getAndIncrement

        public int getAndIncrement​(T obj)
        原子地将此更新程序管理的给定对象的字段的当前值增加1。
        参数
        obj - 要获取和设置其字段的对象
        结果
        以前的值
      • getAndDecrement

        public int getAndDecrement​(T obj)
        原子地将此更新程序管理的给定对象的字段的当前值减1。
        参数
        obj - 要获取和设置其字段的对象
        结果
        以前的值
      • getAndAdd

        public int getAndAdd​(T obj,                     int delta)
        以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。
        参数
        obj - 要获取和设置其字段的对象
        delta - 要添加的值
        结果
        以前的值
      • incrementAndGet

        public int incrementAndGet​(T obj)
        原子地将此更新程序管理的给定对象的字段的当前值增加1。
        参数
        obj - 要获取和设置其字段的对象
        结果
        更新的值
      • decrementAndGet

        public int decrementAndGet​(T obj)
        原子地将此更新程序管理的给定对象的字段的当前值减1。
        参数
        obj - 要获取和设置其字段的对象
        结果
        更新的值
      • addAndGet

        public int addAndGet​(T obj,                     int delta)
        以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。
        参数
        obj - 要获取和设置其字段的对象
        delta - 要添加的值
        结果
        更新的值
      • getAndUpdate

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

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

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

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