パッケージjava.util.concurrent.atomic
VarHandle
操作を使用するフィールドで利用可能なメソッドを使用して、アクセスおよび更新される値を保持します。
AtomicBoolean
、AtomicInteger
、AtomicLong
、およびAtomicReference
クラスのインスタンスは、それぞれ対応する型の単一の変数へのアクセスおよび更新を提供します。 各クラスは、その型に対応したユーティリティ・メソッドも提供します。 たとえば、AtomicLong
およびAtomicInteger
クラスは、原子増分メソッドを提供します。 あるアプリケーションが、次のように通し番号を生成するとします。
class Sequencer {
private final AtomicLong sequenceNumber
= new AtomicLong(17);
public long next() {
return sequenceNumber.getAndIncrement();
}
}
含まれる値の任意の変換は、compareAndSet
のような低レベル読み取り-変更-書き込み操作と、getAndUpdate
のようなより高レベルのメソッドの両方によって提供されます。
これらのクラスは、 java.lang.Integer
および関連クラスの一般的な置き換えではありません。 これらは、equals
、hashCode
、 compareTo
などのメソッドを定義しません。 原子変数は変更されることが予想されるため、ハッシュ表キーの選択肢としては不適切です。
AtomicIntegerArray
、AtomicLongArray
、およびAtomicReferenceArray
クラスは、原子操作のサポートをこれらの型の配列にまでさらに拡張します。 これらのクラスは、配列要素に対してvolatile
アクセス・セマンティクスを提供する際にも注目に値します。
単一の値と配列を表すクラスに加えて、このパッケージには、選択されたクラスのvolatile
フィールドのcompareAndSet
および関連する操作を取得するために使用できる「アップデーター」クラスが含まれています。 これらのクラスは、VarHandle
の導入より前であり、より限定的な使用方法です。 AtomicReferenceFieldUpdater
、AtomicIntegerFieldUpdater
、およびAtomicLongFieldUpdater
は、関連付けられたフィールド型へのアクセスを提供するリフレクション・ベースのユーティリティです。 これらは主に、同じノードの複数のvolatile
フィールド(ツリー・ノードのリンクなど)が独立して原子更新の対象となる原子データ構造で使用されます。 これらのクラスを使用すると、原子更新の使用方法および使用するタイミングに関する柔軟性が高まります。ただし、リフレクション・ベースの設定が扱いにくい、使用しにくい、保証が弱くなるなどの犠牲を払う必要があります。
AtomicMarkableReference
クラスは、単一のboolean値を参照と関連付けます。 たとえば、データ構造の内部でこのビットを使用して、参照中のオブジェクトが論理的に削除済みであることを示せます。 AtomicStampedReference
クラスは、整数値を参照と関連付けます。 これは、一連の更新に対応するバージョン番号を表す場合などに使用できます。
- 導入されたバージョン:
- 1.5
-
クラス説明原子的な更新が可能な
boolean
値です。原子的な更新が可能なint
値です。要素の原子的な更新が可能なint
配列です。指定されたクラスの指定されたvolatile int
フィールドの原子更新が可能な、リフレクション・ベースのユーティリティです。原子的な更新が可能なlong
値です。要素の原子的な更新が可能なlong
配列です。指定されたクラスの指定されたvolatile long
フィールドの原子更新が可能な、リフレクション・ベースのユーティリティです。AtomicMarkableReference
は、原子的に更新可能なマーク・ビットとともに、オブジェクト参照を管理します。原子的な更新が可能なオブジェクト参照です。要素を原子的に更新可能なオブジェクト参照の配列です。指定されたクラスの指定されたvolatile
参照フィールドの原子更新が可能な、リフレクション・ベースのユーティリティです。AtomicStampedReference
は、原子的に更新可能な整数「スタンプ」とともに、オブジェクト参照を管理します。指定された関数を使用して更新される処理中のdouble
値を一緒に保持する1つ以上の変数。初期値ゼロのdouble
の合計を一緒に保持する1つ以上の変数。指定された関数を使用して更新される処理中のlong
値を一緒に保持する1つ以上の変数。初期値ゼロのlong
の合計を一緒に保持する1つ以上の変数。