是否有必要将AtomicReference声明为volatile?

Bog*_*lan 5 java thread-safety

所有其他原子对象都一样吗?解释AtomicInteger的问题更容易.由于超过1个线程正在访问对myInt的引用,因此对于此对象,一个线程是否可能看到已注册的缓存值,例如null,除非它也被声明为volatile?如果不是怎么来的?

ska*_*man 9

它不仅没有必要,而且实际上在语义上是错误的. AtomicReference在其自身内部保存"真实"引用,并使用自己的同步构造管理对它的访问.该JVM自身的同步结构(synchronized,volatile等),而不是使用.AtomicReference不应将对象本身视为易失性.如果有的话,考虑制作它final.

还要考虑这个问题 - 如果您只需要获取和设置操作,则volatile可以将其视为使用的替代方案AtomicReference.