在 java 中,AtomicMarkableReference可用于以原子方式更新对象引用以及标记位。
javadoc指出:
实现说明:此实现通过创建表示“盒装”[reference, boolean] 对的内部对象来维护可标记引用。
根据该类的 java 8 源代码中可以看到的内容,这是正确的:
package java.util.concurrent.atomic;
public class AtomicMarkableReference<V> {
private static class Pair<T> {
final T reference;
final boolean mark;
private Pair(T reference, boolean mark) {
this.reference = reference;
this.mark = mark;
}
static <T> Pair<T> of(T reference, boolean mark) {
return new Pair<T>(reference, mark);
}
}
private volatile Pair<V> pair;
public AtomicMarkableReference(V initialRef, boolean initialMark) {
pair = Pair.of(initialRef, initialMark);
}
// [...] class methods
}
类的get方法的设计背后有原因吗?
public V get(boolean[] markHolder) {
Pair<V> pair = this.pair;
markHolder[0] = pair.mark;
return pair.reference;
}
使用这种布尔数组有什么意义(而不是返回一对值)?是并发驱动的选择吗?或者可能是遗留代码?