我是否需要同步对象的引用?

时间:2015-07-22 11:29:18

标签: java multithreading

我使用 synchronized 对对象的值进行并发写/读操作。

但是,我不确定是否必须同步对象的引用,可以设置并同时获取。 即使下面的B是一个不可变对象,setter也会改变它的引用,并且可以同时调用getter。

class A {
   private B b;

   public setB(B b) { this.b = b; }
   public getB() { return b; }
}

我是否需要同步B的setter和getter(参考)(如果是这样,下面的代码是一个很好的方法)?

class A {
   private B b;
   private Object bLock = new Object();

   public setB(B b) { synchronized(bLock) { this.b = b; } }
   public getB() { synchronized(bLock) { return b; } }
}

1 个答案:

答案 0 :(得分:2)

是的,您需要同步。

您可以使用AtomicReference同步B对象

请注意,在仅需要其get和set方法的代码中使用AtomicReference是过度的 - 您需要的只是 volatile