ベストアンサー1
アトミック参照は、単純なアトミック操作(つまり、スレッドセーフ参照に対する、モニターベースの同期が適切ではない、重要な(重要な)操作。処理中にオブジェクトの状態が変化した場合にのみ、特定のフィールドを設定するとします。
AtomicReference<Object> cache = new AtomicReference<Object>();
Object cachedValue = new Object();
cache.set(cachedValue);
//... time passes ...
Object cachedValueToUpdate = cache.get();
//... do some work to transform cachedValueToUpdate into a new version
Object newValue = someFunctionOfOld(cachedValueToUpdate);
boolean success = cache.compareAndSet(cachedValue,newValue);
アトミック参照セマンティクスのおかげで、cache
オブジェクトがスレッド間で共有されている場合でも、 を使用せずにこれを行うことができます。一般的に、何をしているのかよく分かっている場合を除き、bare ではなくsynchronized
シンクロナイザーまたはフレームワークを使用する方が適切です。java.util.concurrent
Atomic*
このトピックを紹介する 2 つの優れた紙面の参考文献:
注意:(これが常に真実であったかどうかは分かりませんが)参照の割り当て(つまり=
)自体はアトミックです(や のようなプリミティブな64ビット型の更新はアトミックではないかもしれませんが、参照の更新は64ビットであっても常にアトミックです)。を参照してください。long
double
Atomic*
Java 言語仕様第 3 版、セクション 17.7。