|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.concurrent.atomic.AtomicReferenceFieldUpdater<T,V>
T
- 更新可能なフィールドを保持するオブジェクトの型V
- フィールドの型public abstract class AtomicReferenceFieldUpdater<T,V>
指定されたクラスの指定された 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
のほかの呼び出しに関してのみ原子性を保証できます。
コンストラクタの概要 | |
---|---|
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
|
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 |
コンストラクタの詳細 |
---|
protected AtomicReferenceFieldUpdater()
メソッドの詳細 |
---|
public static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
tclass
- フィールドを保持するオブジェクトのクラスvclass
- フィールドのクラスfieldName
- 更新するフィールドの名前
IllegalArgumentException
- フィールドが揮発性の参照型ではない場合
RuntimeException
- クラスにフィールドが含まれないか、型が不正な場合に、入れ子にされたリフレクションベースの例外がスローされるpublic abstract boolean compareAndSet(T obj, V expect, V update)
==
予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。このメソッドは、compareAndSet
および set
に対するほかの呼び出しで原子性を持つことが保証されていますが、フィールド内のほかの変更に関しては必ずしもそうであるとは限りません。
obj
- 条件付きでフィールドを設定するオブジェクトexpect
- 予想される値update
- 新しい値
public abstract boolean weakCompareAndSet(T obj, V expect, V update)
==
予想される値」である場合、このアップデータが管理する指定されたオブジェクトのフィールド値を、指定された更新済みの値に原子的に設定します。このメソッドは、compareAndSet
および set
に対するほかの呼び出しで原子性を持つことが保証されていますが、フィールド内のほかの変更に関しては必ずしもそうであるとは限りません。
見かけ上失敗する可能性があり、順序付け保証を提供しないため、compareAndSet
の代わりに使用することはほとんどありません。
obj
- 条件付きでフィールドを設定するオブジェクトexpect
- 予想される値update
- 新しい値
public abstract void set(T obj, V newValue)
compareAndSet
の呼び出しに関しては、揮発性ストアとして動作することが保証されています。
obj
- フィールドを設定するオブジェクトnewValue
- 新しい値public abstract void lazySet(T obj, V newValue)
obj
- フィールドを設定するオブジェクトnewValue
- 新しい値public abstract V get(T obj)
obj
- フィールドを取得するオブジェクト
public V getAndSet(T obj, V newValue)
obj
- フィールドを取得および設定するオブジェクトnewValue
- 新しい値
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。