モジュール java.base

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


パッケージjava.util.concurrent.atomic
単一の変数に対するロックフリーでスレッドセーフなプログラミングをサポートするクラスの小規模なツールキットです。 Atomicクラスのインスタンスは、関連する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つ以上の変数。