模块 java.base

类 AtomicIntegerFieldUpdater<T>

java.lang.Object
java.util.concurrent.atomic.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
    受保护的无为构造方法供子类使用。
  • 方法总结

    修饰符和类型
    方法
    描述
    final 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
    以原子方式将由此更新程序管理的给定对象的字段的当前值减一。
    abstract int
    get(T obj)
    返回此更新程序管理的给定对象的字段中保存的当前值。
    final int
    getAndAccumulate(T obj, int x, IntBinaryOperator accumulatorFunction)
    原子地更新(具有 VarHandle.compareAndSet(java.lang.Object...) 指定的记忆效应)由该更新程序管理的给定对象的字段,其结果是将给定函数应用于当前值和给定值,返回先前的值。
    int
    getAndAdd(T obj, int delta)
    以原子方式将给定值添加到此更新程序管理的给定对象的字段的当前值。
    int
    以原子方式将由此更新程序管理的给定对象的字段的当前值减一。
    int
    以原子方式将由此更新程序管理的给定对象的字段的当前值递增 1。
    int
    getAndSet(T obj, int newValue)
    以原子方式将此更新程序管理的给定对象的字段设置为给定值并返回旧值。
    final int
    getAndUpdate(T obj, IntUnaryOperator updateFunction)
    使用给定函数的应用结果原子地更新(具有 VarHandle.compareAndSet(java.lang.Object...) 指定的记忆效应)由该更新程序管理的给定对象的字段,返回先前的值。
    int
    以原子方式将由此更新程序管理的给定对象的字段的当前值递增 1。
    abstract void
    lazySet(T obj, int newValue)
    最终将此更新程序管理的给定对象的字段设置为给定的更新值。
    newUpdater(Class<U> tclass, String fieldName)
    为具有给定字段的对象创建并返回更新程序。
    abstract void
    set(T obj, int newValue)
    将此更新程序管理的给定对象的字段设置为给定的更新值。
    final int
    updateAndGet(T obj, IntUnaryOperator updateFunction)
    使用给定函数的应用结果原子地更新(具有 VarHandle.compareAndSet(java.lang.Object...) 指定的记忆效应)由该更新程序管理的给定对象的字段,返回更新后的值。
    abstract boolean
    weakCompareAndSet(T obj, int expect, int update)
    如果当前值 == 预期值,则以原子方式将此更新程序管理的给定对象的字段设置为给定的更新值。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造方法详细信息

    • AtomicIntegerFieldUpdater

      protected AtomicIntegerFieldUpdater()
      受保护的无为构造方法供子类使用。
  • 方法详情

    • newUpdater

      public static <U> AtomicIntegerFieldUpdater <U> newUpdater(Class <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 的其他调用是原子的,但不一定相对于该字段中的其他更改。

      此操作可能会虚假地失败并且不提供排序保证,因此很少是 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)
      以原子方式将由此更新程序管理的给定对象的字段的当前值减一。
      参数:
      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)
      以原子方式将由此更新程序管理的给定对象的字段的当前值减一。
      参数:
      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