Module java.base

Class AtomicReferenceArray<E>

java.lang.Object
java.util.concurrent.atomic.AtomicReferenceArray<E>
类型参数:
E - 此数组中保存的元素的基类
所有已实现的接口:
Serializable

public class AtomicReferenceArray<E> extends Object implements Serializable
一个对象引用数组,其中的元素可以被原子方式更新。请参阅VarHandle规范,了解原子访问属性的描述。
自 JDK 版本:
1.5
另请参见:
  • Constructor Details

    • AtomicReferenceArray

      public AtomicReferenceArray(int length)
      创建一个给定长度的新 AtomicReferenceArray,所有元素最初都为 null。
      参数:
      length - 数组的长度
    • AtomicReferenceArray

      public AtomicReferenceArray(E[] array)
      创建一个新的 AtomicReferenceArray,其长度与给定数组相同,并且所有元素都从给定数组复制而来。
      参数:
      array - 要从中复制元素的数组
      抛出:
      NullPointerException - 如果数组为 null
  • Method Details

    • length

      public final int length()
      返回数组的长度。
      返回:
      数组的长度
    • get

      public final E get(int i)
      返回索引为 i 处元素的当前值,具有VarHandle.getVolatile(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      返回:
      当前值
    • set

      public final void set(int i, E newValue)
      将索引为 i 处的元素设置为 newValue,具有VarHandle.setVolatile(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      newValue - 新值
    • lazySet

      public final void lazySet(int i, E newValue)
      将索引为 i 处的元素设置为 newValue,具有VarHandle.setRelease(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      newValue - 新值
      自 JDK 版本:
      1.6
    • getAndSet

      public final E getAndSet(int i, E newValue)
      将索引为 i 处的元素原子设置为 newValue 并返回旧值,具有VarHandle.getAndSet(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      newValue - 新值
      返回:
      先前的值
    • compareAndSet

      public final boolean compareAndSet(int i, E expectedValue, E newValue)
      将索引为 i 处的元素设置为 newValue,如果元素的当前值== expectedValue,具有VarHandle.compareAndSet(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功。返回false表示实际值不等于期望值。
    • weakCompareAndSet

      @Deprecated(since="9") public final boolean weakCompareAndSet(int i, E expectedValue, E newValue)
      Deprecated.
      This method has plain memory effects but the method name implies volatile memory effects (see methods such as compareAndExchange(int, E, E) and compareAndSet(int, E, E)). To avoid confusion over plain or volatile memory effects it is recommended that the method weakCompareAndSetPlain(int, E, E) be used instead.
      可能会原子性地将索引为i的元素设置为newValue,如果元素的当前值== expectedValue,具有与VarHandle.weakCompareAndSetPlain(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      参见:
    • weakCompareAndSetPlain

      public final boolean weakCompareAndSetPlain(int i, E expectedValue, E newValue)
      可能会原子性地将索引为i的元素设置为newValue,如果元素的当前值== expectedValue,具有与VarHandle.weakCompareAndSetPlain(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      自版本:
      9
    • getAndUpdate

      public final E getAndUpdate(int i, UnaryOperator<E> updateFunction)
      原子性地更新(具有由VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)索引为i的元素,使用给定函数的结果返回先前的值。该函数应该是无副作用的,因为在尝试更新失败时,由于线程之间的争用,可能会重新应用该函数。
      参数:
      i - 索引
      updateFunction - 一个无副作用的函数
      返回:
      先前的值
      自版本:
      1.8
    • updateAndGet

      public final E updateAndGet(int i, UnaryOperator<E> updateFunction)
      原子性地更新(具有由VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)索引为i的元素,使用给定函数的结果返回更新后的值。该函数应该是无副作用的,因为在尝试更新失败时,由于线程之间的争用,可能会重新应用该函数。
      参数:
      i - 索引
      updateFunction - 一个无副作用的函数
      返回:
      更新后的值
      自版本:
      1.8
    • getAndAccumulate

      public final E getAndAccumulate(int i, E x, BinaryOperator<E> accumulatorFunction)
      原子性地更新(具有由VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)索引为i的元素,使用给定函数将当前值和给定值的结果返回先前的值。该函数应该是无副作用的,因为在尝试更新失败时,由于线程之间的争用,可能会重新应用该函数。该函数将当前值作为索引为i的元素的第一个参数,并将给定的更新作为第二个参数应用。
      参数:
      i - 索引
      x - 更新值
      accumulatorFunction - 一个具有两个参数的无副作用函数
      返回:
      先前的值
      自版本:
      1.8
    • accumulateAndGet

      public final E accumulateAndGet(int i, E x, BinaryOperator<E> accumulatorFunction)
      原子性地更新(具有由VarHandle.compareAndSet(java.lang.Object...)指定的内存效果)索引为i的元素,使用给定函数将当前值和给定值的结果返回更新后的值。该函数应该是无副作用的,因为在尝试更新失败时,由于线程之间的争用,可能会重新应用该函数。该函数将当前值作为索引为i的元素的第一个参数,并将给定的更新作为第二个参数应用。
      参数:
      i - 索引
      x - 更新值
      accumulatorFunction - 一个具有两个参数的无副作用函数
      返回:
      更新后的值
      自版本:
      1.8
    • toString

      public String toString()
      返回数组当前值的字符串表示形式。
      覆盖:
      toString 在类 Object
      返回:
      数组当前值的字符串表示形式
    • getPlain

      public final E getPlain(int i)
      返回索引为i的元素的当前值,具有读取的内存语义,就好像变量被声明为非volatile
      参数:
      i - 索引
      返回:
      自版本:
      9
    • setPlain

      public final void setPlain(int i, E newValue)
      将索引为i的元素设置为newValue,具有设置的内存语义,就好像变量被声明为非volatile和非final
      参数:
      i - 索引
      newValue - 新值
      自版本:
      9
    • getOpaque

      public final E getOpaque(int i)
      返回索引为i的元素的当前值,具有由VarHandle.getOpaque(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      返回:
      自版本:
      9
    • setOpaque

      public final void setOpaque(int i, E newValue)
      将索引为i的元素设置为newValue,具有由VarHandle.setOpaque(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      newValue - 新值
      自版本:
      9
    • getAcquire

      public final E getAcquire(int i)
      返回索引为i的元素的当前值,具有由VarHandle.getAcquire(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      返回:
      自版本:
      9
    • setRelease

      public final void setRelease(int i, E newValue)
      将索引为i的元素设置为newValue,具有由VarHandle.setRelease(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      newValue - 新值
      自版本:
      9
    • compareAndExchange

      public final E compareAndExchange(int i, E expectedValue, E newValue)
      如果元素的当前值(称为见证值== expectedValue,则原子性地将索引为i的元素设置为newValue,具有由VarHandle.compareAndExchange(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      见证值,如果成功将与期望值相同
      自版本:
      9
    • compareAndExchangeAcquire

      public final E compareAndExchangeAcquire(int i, E expectedValue, E newValue)
      如果元素的当前值(称为见证值== expectedValue,则原子性地将索引为i的元素设置为newValue,具有由VarHandle.compareAndExchangeAcquire(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      见证值,如果成功将与期望值相同
      自版本:
      9
    • compareAndExchangeRelease

      public final E compareAndExchangeRelease(int i, E expectedValue, E newValue)
      如果元素的当前值(称为见证值== expectedValue,则原子性地将索引为i的元素设置为newValue,具有由VarHandle.compareAndExchangeRelease(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      见证值,如果成功将与期望值相同
      自版本:
      9
    • weakCompareAndSetVolatile

      public final boolean weakCompareAndSetVolatile(int i, E expectedValue, E newValue)
      可能会原子性地将索引为i的元素设置为newValue,如果元素的当前值== expectedValue,具有由VarHandle.weakCompareAndSet(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      自版本:
      9
    • weakCompareAndSetAcquire

      public final boolean weakCompareAndSetAcquire(int i, E expectedValue, E newValue)
      可能会原子性地将索引为i的元素设置为newValue,如果元素的当前值== expectedValue,具有由VarHandle.weakCompareAndSetAcquire(java.lang.Object...)指定的内存效果。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      自版本:
      9
    • weakCompareAndSetRelease

      public final boolean weakCompareAndSetRelease(int i, E expectedValue, E newValue)
      可能在满足内存效果的情况下,使用VarHandle.weakCompareAndSetRelease(java.lang.Object...),将索引为i的元素原子地设置为newValue,如果元素的当前值== expectedValue
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      自版本:
      9