モジュール java.base

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

単一の変数に対するロックフリーでスレッドセーフなプログラミングをサポートするクラスの小規模なツールキットです。 Atomicクラスのインスタンスは、関連するatomic VarHandle操作を使用するフィールドで利用可能なメソッドを使用して、アクセスおよび更新される値を保持します。

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

 
 class Sequencer {
   private final AtomicLong sequenceNumber
     = new AtomicLong(0);
   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