如果我只使用get()
和set()
-methods,那么AtomicReference
中的volatile
对象引用和AtomicReference
之间有什么区别吗
发布于 2008-11-11 15:20:34
不,没有。
AtomicReference提供的额外功能是compareAndSet()方法和朋友。如果您不需要这些方法,则volatile引用提供与AtomicReference.set()和.get()相同的语义。
发布于 2013-02-03 23:24:42
JDK source code是解决这种困惑的最好方法之一。如果您查看AtomicReference中的代码,您会发现它使用了一个volatie变量来存储对象。
private volatile V value;
所以,很明显,如果你打算在AtomicReference上只使用get()和set(),就像使用一个易失性变量。但正如其他读者评论的那样,AtomicReference提供了额外的CAS语义。因此,首先决定是否需要CAS语义,如果需要,则使用AtomicReference。
发布于 2009-01-30 20:35:39
AtomicReference
提供了普通的易失性变量无法提供的附加功能。当您阅读API Javadoc时,您将知道这一点,但它还提供了一个锁,该锁对某些操作很有用。
但是,除非您需要这个额外的功能,否则我建议您使用一个普通的volatile
字段。
https://stackoverflow.com/questions/281132
复制相似问题