アトミック操作の基本クラス
AtomicBoolean:アトミックアップデートブールタイプ。
AtomicInteger:アトミック更新整数。
AtomicLong:アトミック更新の長整数。
AtomicInteger:
int addAndGet(int delta):入力された値をインスタンス内の値(AtomicInteger)とアトミックに結合します
値)を追加して結果を返します。
boolean compareAndSet(int expect、int update):入力値が期待値と等しい場合、値はアトミックに入力値に設定されます。
int getAndIncrement():現在の値にアトミックに1を追加します。ここで返されるのは、増分前の値であることに注意してください。
void lazySet(int newValue):最終的にはnewValueに設定されます。lazySetを使用して値を設定した後でも、他のスレッドが短期間古い値を読み取ることができる場合があります。
int getAndSet(int newValue):newValueの値をアトミックに設定し、古い値を返します。
アトミックアレイ操作
AtomicIntegerArray:整数配列の要素のアトミック更新。
AtomicLongArray:長整数配列の要素をアトミック更新します。
AtomicReferenceArray:参照タイプ配列の要素のアトミック更新。
AtomicIntegerArrayクラスは、主に配列内の整数型を更新するためのアトミックな方法を提供します
AtomicIntegerArray:
int addAndGet(int i、int delta):入力値を配列のインデックスiの要素に原子的に追加します。
boolean compareAndSet(int i、int expect、int update):現在の値が期待値と等しい場合は、アトムを使用します
配列の位置iにある要素を更新値に設定します。
原子引用操作
AtomicReference:アトミックアップデートリファレンスタイプ。
AtomicReferenceFieldUpdater:参照タイプのフィールドをアトミック更新します。
AtomicMarkableReference:マークビットを使用した参照タイプのアトミック更新。ブールはアトミックに更新できます
タイプマークビットとリファレンスタイプ。構築方法はAtomicMarkableReference(V initialRef、boolean
initialMark)。
例1:
public static AtomicReference<User> atomicUserRef = new AtomicReference<User>();
public static void main(String[] args) {
User updateUser= new User("conan", 15);
User user=atomicUserRef.get();
atomicUserRef.compareAndSet(user, updateUser);
}
例2:
private static AtomicIntegerFieldUpdater<User> a = AtomicIntegerFieldUpdater.newUpdater(User.class, "old");
public static void main(String[] args) {
User conan = new User("conan", 10);
System.out.println(getAndIncrement(conan));
System.out.println(a.get(conan));
}
例3:
private static AtomicMarkableReference<Integer> a=new AtomicMarkableReference<Integer>(1, false);
public static void main(String[] args) {
System.out.println(a.compareAndSet(1, 2, false, true));
}
アトミックアップデートフィールドクラス
AtomicIntegerFieldUpdater:整数フィールドをアトミックに更新するアップデーター。
AtomicLongFieldUpdater:長い整数フィールドをアトミックに更新するアップデーター。
AtomicStampedReference:バージョン番号付きのアトミックアップデートリファレンスタイプ。このクラスは、整数値を参照に関連付け、アトミック更新データとデータバージョン番号に使用でき、アトミック更新にCASを使用するときに発生する可能性のあるABAの問題を解決できます。