在Java中,可以使用AtomicMarkableReference原子性地更新对象引用和标记位。根据javadoc所述,这个实现会通过创建代表“装箱” [引用,布尔] 对的内部对象来维护可标记的引用。根据该类在Java 8源代码中的实现,这是正确的。请注意,HTML标签已被保留。
使用这种布尔数组的意义是什么(而不是返回值对)?这是一个基于并发的选择吗?还是旧代码?
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方法的设计有何原因?
(意思是询问AtomicMarkableReference这个类中get()方法的设计背后是否有特殊想法或用意)public V get(boolean[] markHolder) {
Pair<V> pair = this.pair;
markHolder[0] = pair.mark;
return pair.reference;
}
使用这种布尔数组的意义是什么(而不是返回值对)?这是一个基于并发的选择吗?还是旧代码?
Pair
类型。 - Louis WassermanPair
类型的实现上。 - Louis Wasserman