java.lang.Object
java.util.concurrent.atomic.AtomicMarkableReference<V>
- 类型参数:
-
V
- 此引用所指对象的类型
AtomicMarkableReference
维护一个对象引用和一个标记位,可以原子性地更新。
实现注意事项: 此实现通过创建内部对象来维护可标记引用,这些内部对象表示“装箱化”[引用,布尔]对。
- 自 JDK 版本:
- 1.5
-
Constructor Summary
ConstructorDescriptionAtomicMarkableReference
(V initialRef, boolean initialMark) 使用给定的初始值创建一个新的AtomicMarkableReference
。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
attemptMark
(V expectedReference, boolean newMark) 如果当前引用等于预期引用,则原子性地将标记的值设置为给定的更新值。boolean
compareAndSet
(V expectedReference, V newReference, boolean expectedMark, boolean newMark) 如果当前引用等于预期引用且当前标记等于预期标记,则原子性地将引用和标记的值都设置为给定的更新值。get
(boolean[] markHolder) 返回当前的引用和标记值。返回当前的引用值。boolean
isMarked()
返回当前的标记值。void
无条件地设置引用和标记的值。boolean
weakCompareAndSet
(V expectedReference, V newReference, boolean expectedMark, boolean newMark) 如果当前引用等于预期引用且当前标记等于预期标记,则原子性地将引用和标记的值都设置为给定的更新值。
-
Constructor Details
-
AtomicMarkableReference
使用给定的初始值创建一个新的AtomicMarkableReference
。- 参数:
-
initialRef
- 初始引用 -
initialMark
- 初始标记
-
-
Method Details
-
getReference
返回当前的引用值。- 返回值:
- 当前的引用值
-
isMarked
public boolean isMarked()返回当前的标记值。- 返回值:
- 当前的标记值
-
get
返回当前的引用和标记值。典型用法是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
无条件地设置引用和标记的值。- 参数:
-
newReference
- 引用的新值 -
newMark
- 标记的新值
-
attemptMark
如果当前引用等于预期引用,则原子性地将标记的值设置为给定的更新值。此操作的任何调用可能会偶然失败(返回false
),但在当前值保持预期值且没有其他线程尝试设置值时的重复调用最终会成功。- 参数:
-
expectedReference
- 引用的预期值 -
newMark
- 标记的新值 - 返回值:
-
如果成功则返回
true
-