我理解的是:
class Case1{
private Object object;
public synchronized Object getObject() {
return object;
}
public synchronized void setObject(Object object) {
this.object = object;
}
}
与:
相比,将被认为是弃用的。class Case2{
private AtomicReference<Object> object = new AtomicReference<Object>();
public Object getObject() {
return object.get();
}
public void setObject(Object object) {
this.object.set(object);
}
}
我对吗?
在两种情况下,getter和setter内的操作是原子(参考分配)。因此,更有效(至少在可读性方面)成语是:
class Case3 {
private volatile Object object = new Object();
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
至于您的实际问题,AtomicReference
提供了一些简单的原子操作,如果您需要的话,这将使之在挥发性上是一个不错的选择。synchronized
使整个原子都可以使您以原子的方式进行更复杂的操作。
换句话说, volatile
, AtomicReference
和 synchronized
都有其特异性,并且不相等。
挥发性就足够了。AtomicReference添加了更多有用的操作,例如getAndset()和compareAndset()。但是,如果您只能进行设置,则挥发性应该更便宜。