Module java.base

Class AtomicStampedReference<V>

java.lang.Object
java.util.concurrent.atomic.AtomicStampedReference<V>
类型参数:
V - 此引用所引用对象的类型

public class AtomicStampedReference<V> extends Object
AtomicStampedReference 保持一个对象引用和一个整数“标记”,可以原子方式更新。

实现注意事项: 此实现通过创建表示“装箱化”[引用,整数]对的内部对象来维护标记引用。

自 JDK 版本:
1.5
  • Constructor Summary

    Constructors
    Constructor
    Description
    AtomicStampedReference(V initialRef, int initialStamp)
    创建一个具有给定初始值的新 AtomicStampedReference
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    attemptStamp(V expectedReference, int newStamp)
    如果当前引用等于预期引用,则将标记的值原子设置为给定的更新值。
    boolean
    compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)
    如果当前引用等于预期引用且当前标记等于预期标记,则将引用和标记的值原子设置为给定的更新值。
    V
    get(int[] stampHolder)
    返回引用和标记的当前值。
    V
    返回引用的当前值。
    int
    返回标记的当前值。
    void
    set(V newReference, int newStamp)
    无条件地设置引用和标记的值。
    boolean
    weakCompareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)
    如果当前引用等于预期引用且当前标记等于预期标记,则将引用和标记的值原子设置为给定的更新值。

    Methods declared in class java.lang.Object

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

    • AtomicStampedReference

      public AtomicStampedReference(V initialRef, int initialStamp)
      创建一个具有给定初始值的新 AtomicStampedReference
      参数:
      initialRef - 初始引用
      initialStamp - 初始标记
  • Method Details

    • getReference

      public V getReference()
      返回引用的当前值。
      返回:
      引用的当前值
    • getStamp

      public int getStamp()
      返回标记的当前值。
      返回:
      标记的当前值
    • get

      public V get(int[] stampHolder)
      返回引用和标记的当前值。典型用法是 int[1] holder; ref = v.get(holder);
      参数:
      stampHolder - 至少为一的大小数组。返回时,stampHolder[0] 将保存标记的值。
      返回:
      引用的当前值
    • weakCompareAndSet

      public boolean weakCompareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)
      如果当前引用等于预期引用且当前标记等于预期标记,则将引用和标记的值原子设置为给定的更新值。此操作可能会出现偶然失败,并且不提供排序保证,因此很少是与 compareAndSet 相比的适当替代方案。
      参数:
      expectedReference - 引用的预期值
      newReference - 引用的新值
      expectedStamp - 标记的预期值
      newStamp - 标记的新值
      返回:
      如果成功则返回 true
    • compareAndSet

      public boolean compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)
      如果当前引用等于预期引用且当前标记等于预期标记,则将引用和标记的值原子设置为给定的更新值。
      参数:
      expectedReference - 引用的预期值
      newReference - 引用的新值
      expectedStamp - 标记的预期值
      newStamp - 标记的新值
      返回:
      如果成功则返回 true
    • set

      public void set(V newReference, int newStamp)
      无条件地设置引用和标记的值。
      参数:
      newReference - 引用的新值
      newStamp - 标记的新值
    • attemptStamp

      public boolean attemptStamp(V expectedReference, int newStamp)
      如果当前引用等于预期引用,则将标记的值原子设置为给定的更新值。此操作的任何调用可能会偶然失败(返回 false),但在当前值保持预期值且没有其他线程尝试设置值时的重复调用最终会成功。
      参数:
      expectedReference - 引用的预期值
      newStamp - 标记的新值
      返回:
      如果成功则返回 true