1.类 AtomicStampedReference<V>
AtomicStampedReference
维护带有整数“标志”的对象引用,可以用原子方式对其进行更新。
实现注意事项。通过创建表示“已装箱”的 [reference, integer] 对的内部对象,此实现维持带标志的引用。
2.构造函数
AtomicStampedReference
public AtomicStampedReference(V initialRef,
int initialStamp)
- 创建具有给定初始值的新
AtomicStampedReference
。- 参数:
-
initialRef
- 初始引用 -
initialStamp
- 初始标志
3.方法详解
getReference
public V getReference()
- 返回该引用的当前值。
-
- 返回:
- 该引用的当前值
getStamp
public int getStamp()
- 返回该标志的当前值。
-
- 返回:
- 该标志的当前值
get
public V get(int[] stampHolder)
- 返回该引用和该标志的当前值。典型的用法为
int[1] holder; ref = v.get(holder);
。 -
- 参数:
-
stampHolder
- 大小至少为 1 的数组。返回时,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