模块 java.base

类 AtomicReferenceArray<E>

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

public class AtomicReferenceArray<E> extends Object implements Serializable
一个对象引用数组,其中的元素可以自动更新。有关原子访问属性的描述,请参阅 VarHandle 规范。
自从:
1.5
参见:
  • 构造方法详细信息

    • AtomicReferenceArray

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

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

    • 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 - 新值
      自从:
      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)
      如果元素的当前值为 == expectedValue,则以原子方式将索引 i 处的元素设置为 newValue,并具有由 VarHandle.compareAndSet(java.lang.Object...) 指定的记忆效应。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功。错误返回表示实际值不等于预期值。
    • weakCompareAndSet

      @Deprecated (since ="9") public final boolean weakCompareAndSet(int i, E  expectedValue, E  newValue)
      已弃用。
      此方法具有简单的记忆效应,但方法名称暗示易失性记忆效应(请参阅 compareAndExchange(int, E, E) compareAndSet(int, E, E) 等方法)。为避免混淆普通或易失性记忆效应,建议改用方法 weakCompareAndSetPlain(int, E, E)
      如果元素的当前值为 == expectedValue ,则可能自动将索引 i 处的元素设置为 newValue ,并具有由 VarHandle.weakCompareAndSetPlain(java.lang.Object...) 指定的记忆效应。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      参见:
    • weakCompareAndSetPlain

      public final boolean weakCompareAndSetPlain(int i, E  expectedValue, E  newValue)
      如果元素的当前值为 == expectedValue ,则可能自动将索引 i 处的元素设置为 newValue ,并具有由 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 ,设置的内存语义就好像变量被声明为 non-volatile 和 non-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)
      如果元素的当前值称为 witness value== expectedValue,具有 VarHandle.compareAndExchange(java.lang.Object...) 指定的记忆效应,则以原子方式将索引 i 处的元素设置为 newValue
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      见证值,如果成功,它将与预期值相同
      自从:
      9
    • compareAndExchangeAcquire

      public final E  compareAndExchangeAcquire(int i, E  expectedValue, E  newValue)
      如果元素的当前值称为 witness value== expectedValue,具有由 VarHandle.compareAndExchangeAcquire(java.lang.Object...) 指定的记忆效应,则以原子方式将索引 i 处的元素设置为 newValue
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      见证值,如果成功,它将与预期值相同
      自从:
      9
    • compareAndExchangeRelease

      public final E  compareAndExchangeRelease(int i, E  expectedValue, E  newValue)
      如果元素的当前值(称为 witness value== expectedValue )具有由 VarHandle.compareAndExchangeRelease(java.lang.Object...) 指定的记忆效应,则以原子方式将索引 i 处的元素设置为 newValue
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      见证值,如果成功,它将与预期值相同
      自从:
      9
    • weakCompareAndSetVolatile

      public final boolean weakCompareAndSetVolatile(int i, E  expectedValue, E  newValue)
      如果元素的当前值为 == expectedValue ,则可能自动将索引 i 处的元素设置为 newValue ,并具有由 VarHandle.weakCompareAndSet(java.lang.Object...) 指定的记忆效应。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      自从:
      9
    • weakCompareAndSetAcquire

      public final boolean weakCompareAndSetAcquire(int i, E  expectedValue, E  newValue)
      如果元素的当前值为 == expectedValue ,则可能自动将索引 i 处的元素设置为 newValue ,并具有由 VarHandle.weakCompareAndSetAcquire(java.lang.Object...) 指定的记忆效应。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      自从:
      9
    • weakCompareAndSetRelease

      public final boolean weakCompareAndSetRelease(int i, E  expectedValue, E  newValue)
      如果元素的当前值为 == expectedValue ,则可能以原子方式将索引 i 处的元素设置为 newValue ,并具有由 VarHandle.weakCompareAndSetRelease(java.lang.Object...) 指定的记忆效应。
      参数:
      i - 索引
      expectedValue - 期望值
      newValue - 新值
      返回:
      true 如果成功
      自从:
      9