Module java.base

Class AtomicMarkableReference<V>

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

public class AtomicMarkableReference<V> extends Object
AtomicMarkableReference 维护一个对象引用和一个标记位,可以原子性地更新。

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

自 JDK 版本:
1.5
  • Constructor Summary

    Constructors
    Constructor
    Description
    AtomicMarkableReference(V initialRef, boolean initialMark)
    使用给定的初始值创建一个新的 AtomicMarkableReference
  • Method Summary

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

    Methods declared in class java.lang.Object

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

    • AtomicMarkableReference

      public AtomicMarkableReference(V initialRef, boolean initialMark)
      使用给定的初始值创建一个新的 AtomicMarkableReference
      参数:
      initialRef - 初始引用
      initialMark - 初始标记
  • Method Details

    • getReference

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

      public boolean isMarked()
      返回当前的标记值。
      返回值:
      当前的标记值
    • get

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

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

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

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

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