使用Synhronize进行Getters/Setter或AtomicReference



我理解的是:

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使整个原子都可以使您以原子的方式进行更复杂的操作。

换句话说, volatileAtomicReferencesynchronized都有其特异性,并且不相等。

挥发性就足够了。AtomicReference添加了更多有用的操作,例如getAndset()和compareAndset()。但是,如果您只能进行设置,则挥发性应该更便宜。

最新更新