モジュール java.base

クラスAtomicReferenceFieldUpdater<T,V>

java.lang.Object
java.util.concurrent.atomic.AtomicReferenceFieldUpdater<T,V>
型パラメータ:
T - 更新可能なフィールドを保持するオブジェクトの型
V - フィールドの型

public abstract class AtomicReferenceFieldUpdater<T,V> extends Object
指定されたクラスの指定されたvolatile参照フィールドの原子更新が可能な、リフレクション・ベースのユーティリティです。 このクラスは、同一ノードの複数の参照フィールドが独立して原子更新の対象になる原子データ構造での使用を念頭に置いて設計されています。 たとえば、ツリー・ノードは次のように宣言されます。
 
 class Node {
   private volatile Node left, right;

   private static final AtomicReferenceFieldUpdater<Node, Node> leftUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
   private static final AtomicReferenceFieldUpdater<Node, Node> rightUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "right");

   Node getLeft() { return left; }
   boolean compareAndSetLeft(Node expect, Node update) {
     return leftUpdater.compareAndSet(this, expect, update);
   }
   // ... and so on
 }

このクラス内のcompareAndSetメソッドの保証は、ほかの原子クラス内のそれよりも弱いことに留意してください。 このクラスは、フィールドの使用すべてが原子アクセスに適していることを保証できないため、同じアップデータでのcompareAndSetおよびsetのほかの呼出しに関してのみ原子性を保証できます。

newUpdater(java.lang.Class<U>, java.lang.Class<W>, java.lang.String)に渡されるクラスのインスタンスではない、T型のパラメータのオブジェクト引数は、ClassCastExceptionがスローされます。

導入されたバージョン:
1.5