Module java.base

Class AtomicIntegerFieldUpdater<T>

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

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

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

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

自 JDK 版本:
1.5
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    供子类使用的受保护的空构造函数。
  • Method Summary

    Modifier and Type
    Method
    Description
    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
    将由此更新程序管理的给定对象的字段的当前值增加一。
    int
    getAndSet(T obj, int newValue)
    将由此更新程序管理的给定对象的字段设置为给定值,并返回旧值的原子操作。
    final int
    getAndUpdate(T obj, IntUnaryOperator updateFunction)
    原子地更新(具有由VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)由此更新程序管理的给定对象的字段,使用给定函数的结果,并返回先前的值。
    int
    将由此更新程序管理的给定对象的字段的当前值增加一。
    abstract void
    lazySet(T obj, int newValue)
    最终将由此更新程序管理的给定对象的字段设置为给定的更新值。
    static <U> AtomicIntegerFieldUpdater<U>
    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)
    如果当前值==期望值,则将由此更新程序管理的给定对象的字段设置为给定的更新值。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • AtomicIntegerFieldUpdater

      protected AtomicIntegerFieldUpdater()
      供子类使用的受保护的空构造函数。
  • Method Details

    • newUpdater

      public static <U> AtomicIntegerFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)
      创建并返回具有给定字段的更新程序。需要 Class 参数以检查反射类型和泛型类型是否匹配。
      类型参数:
      U - tclass 的实例的类型
      参数:
      tclass - 持有字段的对象的类
      fieldName - 要更新的字段的名称
      返回:
      更新程序
      抛出:
      IllegalArgumentException - 如果字段不是 volatile integer 类型
      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的调用作为 volatile 存储。
      参数:
      obj - 要设置字段的对象
      newValue - 新值
    • lazySet

      public abstract void lazySet(T obj, int newValue)
      最终将由此更新程序管理的给定对象的字段设置为给定的更新值。
      参数:
      obj - 要设置字段的对象
      newValue - 新值
      自 JDK 版本:
      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)
      将由此更新程序管理的给定对象的字段的当前值增加一。
      参数:
      obj - 要获取和设置字段的对象
      返回:
      先前的值
    • getAndDecrement

      public int getAndDecrement(T obj)
      将由此更新程序管理的给定对象的字段的当前值减少一。
      参数:
      obj - 要获取和设置字段的对象
      返回:
      先前的值
    • getAndAdd

      public int getAndAdd(T obj, int delta)
      将给定值原子地添加到由此更新程序管理的给定对象的字段的当前值。
      参数:
      obj - 要获取和设置字段的对象
      delta - 要添加的值
      返回:
      先前的值
    • incrementAndGet

      public int incrementAndGet(T obj)
      将由此更新程序管理的给定对象的字段的当前值增加一。
      参数:
      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 - 无副作用的函数
      返回:
      先前的值
      自 JDK 版本:
      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