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
メソッドの概要 |
abstract boolean |
compareAndSet(T obj,
V expect,
V update)
「現在の値 == 予想される値」である場合、この Updater が管理する、指定されたオブジェクトのフィールド値を原子的に設定します。 |
abstract V |
get(T obj)
指定されたオブジェクトが保持する、フィールド内の現在値を取得します。 |
V |
getAndSet(T obj,
V newValue)
指定された値に設定して、以前の値を返します。 |
static
|
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)
「現在の値 == 予想される値」である場合、この Updater が管理する、指定されたオブジェクトのフィールド値を原子的に設定します。 |
クラス 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)
- 「現在の値 == 予想される値」である場合、この Updater が管理する、指定されたオブジェクトのフィールド値を原子的に設定します。このメソッドは、compareAndSet および set に対する他の呼び出しで原子性を持つことが保証されていますが、フィールド内の他の変更に関しては必ずしもそうであるとは限りません。
- パラメータ:
obj
- 条件付きでフィールドを設定するオブジェクトexpect
- 予想される値update
- 新しい値
- 戻り値:
- 成功した場合は true
weakCompareAndSet
public abstract boolean weakCompareAndSet(T obj,
V expect,
V update)
- 「現在の値 == 予想される値」である場合、この Updater が管理する、指定されたオブジェクトのフィールド値を原子的に設定します。このメソッドは、compareAndSet および set に対する他の呼び出しで原子性を持つことが保証されていますが、フィールド内の他の変更に関しては必ずしもそうであるとは限りません。これは、見かけ上失敗する場合があります。
- パラメータ:
obj
- 条件付きでフィールドを設定するオブジェクトexpect
- 予想される値update
- 新しい値
- 戻り値:
- 成功した場合は true
set
public abstract void set(T obj,
V newValue)
- このアップデータにより管理される、指定されたオブジェクトのフィールドを設定します。この操作は、後続の compareAndSet の呼び出しに関しては、揮発性ストアとして動作することが保証されています。
- パラメータ:
obj
- フィールドを設定するオブジェクトnewValue
- 新しい値
get
public abstract V get(T obj)
- 指定されたオブジェクトが保持する、フィールド内の現在値を取得します。
- パラメータ:
obj
- フィールドを取得するオブジェクト
- 戻り値:
- 現在の値
getAndSet
public V getAndSet(T obj,
V newValue)
- 指定された値に設定して、以前の値を返します。
- パラメータ:
obj
- フィールドを取得および設定するオブジェクトnewValue
- 新しい値
- 戻り値:
- 前の値
バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。