JavaでAtomicMarkableReferenceを使用して、マークビットとともにオブジェクト参照をアトミックに更新することができます。JavaのAtomicMarkableReferenceの "get"メソッド実装の背後にある理由は何ですか?
javadoc状態:
実装注:この実装は、「箱入り」[参照、ブール]ペアを表す内部オブジェクトを作成することにより、マーキングの参照を維持します。
これは、クラスのJavaの8ソースコードで見ることができるかに応じて真である:クラスのget方法の設計の背後にある理由は
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
}
ありますか?
public V get(boolean[] markHolder) {
Pair<V> pair = this.pair;
markHolder[0] = pair.mark;
return pair.reference;
}
(値のペアを返す代わりに)このようなブール値の配列を使用する点は何ですか?同時実行性の選択ですか?あるいはレガシーコードでしょうか?
Javaには、「ペア」タイプがありません。 –
(さらに、Javaは、このような 'Pair'タイプに基づく実装を使用して_always_に自己を結びつけたくありませんでした。) –