JavaTM Platform
Standard Ed. 6

java.util.concurrent.atomic
クラス 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 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 のほかの呼び出しに関してのみ原子性を保証できます。

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

コンストラクタの概要
protected AtomicReferenceFieldUpdater()
          サブクラスにより使用される、何も行わない protected コンストラクタ。
 
メソッドの概要
abstract  boolean compareAndSet(T obj, V expect, V update)
          「現在の値 == 予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。
abstract  V get(T obj)
          このアップデータが管理する指定されたオブジェクトのフィールドが保持する現在値を取得します。
 V getAndSet(T obj, V newValue)
          このアップデータにより管理される指定されたオブジェクトのフィールドを指定された値に原始的に設定し、以前の値を返します。
abstract  void lazySet(T obj, V newValue)
          このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に最終的に設定します。
static
<U,W> AtomicReferenceFieldUpdater<U,W>
newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
          指定されたフィールドを持つオブジェクトのアップデータを作成して返します。
abstract  void set(T obj, V newValue)
          このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に設定します。
abstract  boolean weakCompareAndSet(T obj, V expect, V update)
          「現在の値 == 予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

AtomicReferenceFieldUpdater

protected AtomicReferenceFieldUpdater()
サブクラスにより使用される、何も行わない protected コンストラクタ。

メソッドの詳細

newUpdater

public static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass,
                                                                Class<W> vclass,
                                                                String fieldName)
指定されたフィールドを持つオブジェクトのアップデータを作成して返します。Class 引数は、リフレクト型と総称型の一致をチェックするために必要です。

パラメータ:
tclass - フィールドを保持するオブジェクトのクラス
vclass - フィールドのクラス
fieldName - 更新するフィールドの名前
戻り値:
アップデータ
例外:
IllegalArgumentException - フィールドが揮発性の参照型ではない場合
RuntimeException - クラスにフィールドが含まれないか、型が不正な場合に、入れ子にされたリフレクションベースの例外がスローされる

compareAndSet

public abstract boolean compareAndSet(T obj,
                                      V expect,
                                      V update)
「現在の値 == 予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。このメソッドは、compareAndSet および set に対するほかの呼び出しで原子性を持つことが保証されていますが、フィールド内のほかの変更に関しては必ずしもそうであるとは限りません。

パラメータ:
obj - 条件付きでフィールドを設定するオブジェクト
expect - 予想される値
update - 新しい値
戻り値:
成功する場合は true

weakCompareAndSet

public abstract boolean weakCompareAndSet(T obj,
                                          V expect,
                                          V update)
「現在の値 == 予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。このメソッドは、compareAndSet および set に対するほかの呼び出しで原子性を持つことが保証されていますが、フィールド内のほかの変更に関しては必ずしもそうであるとは限りません。

見かけ上失敗する可能性があり、順序付け保証を提供しないため、compareAndSet の代わりに使用することはほとんどありません。

パラメータ:
obj - 条件付きでフィールドを設定するオブジェクト
expect - 予想される値
update - 新しい値
戻り値:
成功する場合は true

set

public abstract void set(T obj,
                         V newValue)
このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に設定します。この操作は、後続の compareAndSet の呼び出しに関しては、揮発性ストアとして動作することが保証されています。

パラメータ:
obj - フィールドを設定するオブジェクト
newValue - 新しい値

lazySet

public abstract void lazySet(T obj,
                             V newValue)
このアップデータにより管理される指定されたオブジェクトのフィールドを、指定された更新済みの値に最終的に設定します。

パラメータ:
obj - フィールドを設定するオブジェクト
newValue - 新しい値
導入されたバージョン:
1.6

get

public abstract V get(T obj)
このアップデータが管理する指定されたオブジェクトのフィールドが保持する現在値を取得します。

パラメータ:
obj - フィールドを取得するオブジェクト
戻り値:
現在の値

getAndSet

public V getAndSet(T obj,
                   V newValue)
このアップデータにより管理される指定されたオブジェクトのフィールドを指定された値に原始的に設定し、以前の値を返します。

パラメータ:
obj - フィールドを取得および設定するオブジェクト
newValue - 新しい値
戻り値:
前の値

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。