JavaAtomicReferenceFieldUpdater
ドキュメントから:
このクラスのメソッドの保証は、
compareAndSet
他のアトミッククラスよりも弱いことに注意してください。このクラスは、フィールドのすべての使用がアトミックアクセスの目的に適切であることを保証できないため、およびの他の呼び出しに関してのみ、アトミック性と揮発性セマンティクスを保証できcompareAndSet
ますset
。
つまり、通常の揮発性書き込みをと一緒に実行することはできませんが、代わりcompareAndSet
に使用する必要があります。set
については何も言及していませんget
。
それは、同じ原子性の保証で揮発性フィールドをまだ読み取ることができることを意味します-set
またはの前にすべての書き込みcompareAndSet
があり、揮発性フィールドを読み取ったすべての人に表示されますか?
または、フィールドでの揮発性読み取りget
の代わりにを使用する必要がありますか?AtomicReferenceFieldUpdater
参考文献をお持ちの場合は投稿してください。
ありがとうございました。
編集:
Java Concurrency in Practiceから、彼らが言うのは次のことだけです。
アップデータクラスのアトミック性の保証は、基になるフィールドが直接変更されないことを保証できないため、通常のアトミッククラスよりも弱くなります。compareAndSetメソッドと算術メソッドは、アトミックフィールドアップデータメソッドを使用する他のスレッドに関してのみアトミック性を保証します。
繰り返しますが、他のスレッドがこれらの揮発性フィールドを読み取る方法については言及されていません。
また、「直接変更」は通常の揮発性書き込みであると想定するのは正しいですか?