モジュール java.base

パッケージ java.util.concurrent.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アクセス・セマンティクスを提供する際にも注目されます。

このパッケージには、単一の値および配列を表すクラスに加え、Updaterクラスが含まれています。このクラスは、選択したクラスの選択したvolatileフィールドに対するcompareAndSetおよび関連操作を取得するために使用できます。 これらのクラスは、VarHandleの導入より前から使用されており、使用が制限されています。 AtomicReferenceFieldUpdaterAtomicIntegerFieldUpdaterおよびAtomicLongFieldUpdaterは、関連するフィールド・タイプへのアクセスを提供するリフレクション・ベースのユーティリティです。 これらは主に、同じノードの複数のvolatileフィールド(ツリー・ノードのリンクなど)が独立して原子更新の対象となる原子データ構造で使用されます。 これらのクラスを使用すると、原子更新の使用方法および使用するタイミングに関する柔軟性が高まります。ただし、リフレクション・ベースの設定が扱いにくい、使用しにくい、保証が弱くなるなどの犠牲を払う必要があります。

AtomicMarkableReferenceクラスは、単一のboolean値を参照と関連付けます。 たとえば、データ構造の内部でこのビットを使用して、参照中のオブジェクトが論理的に削除済みであることを示せます。 AtomicStampedReferenceクラスは、整数値を参照と関連付けます。 これは、一連の更新に対応するバージョン番号を表す場合などに使用できます。

導入されたバージョン:
1.5