モジュール java.base

パッケージjava.util.concurrent.atomic


パッケージjava.util.concurrent.atomic
単一の変数に対するロックフリーでスレッドセーフなプログラミングをサポートするクラスの小規模なツールキットです。 アトミック・クラスのインスタンスは、メソッドを使用してアクセスおよび更新される値を保持します。それ以外の場合は、関連するアトミックVarHandle操作を使用するフィールドで使用できます。

AtomicBooleanAtomicIntegerAtomicLong、およびAtomicReferenceクラスのインスタンスは、それぞれ対応する型の単一の変数へのアクセスおよび更新を提供します。 各クラスは、その型に対応したユーティリティ・メソッドも提供します。 たとえば、AtomicLongおよびAtomicIntegerクラスは、原子増分メソッドを提供します。 あるアプリケーションが、次のように通し番号を生成するとします。

 
 class Sequencer {
   private final AtomicLong sequenceNumber
     = new AtomicLong(17);
   public long next() {
     return sequenceNumber.getAndIncrement();
   }
 }

含まれる値の任意の変換は、compareAndSetのような低レベル読み取り-変更-書き込み操作と、getAndUpdateのようなより高レベルのメソッドの両方によって提供されます。

これらのクラスは、 java.lang.Integerおよび関連するクラスの汎用的な置換ではありません。 これらは、equalshashCode compareToなどのメソッドを定義しません アトミック変数は変更されることが予想されるため、ハッシュ表キーの選択肢が不足しています。

AtomicIntegerArrayAtomicLongArray、およびAtomicReferenceArrayクラスは、原子操作のサポートをこれらの型の配列にまでさらに拡張します。 これらのクラスは、配列要素に対するvolatileアクセス・セマンティクスの提供にも注目されています。

このパッケージには、単一の値および配列を表すクラスに加えて、選択したクラスの任意のvolatileフィールドでcompareAndSetおよび関連する操作を取得するために使用できる「アップ・データ」クラスが含まれています。 これらのクラスは、VarHandleの導入に先行し、より限定的に使用されます。 AtomicReferenceFieldUpdaterAtomicIntegerFieldUpdater、および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つ以上の変数。