Java 同步getter和setter

Java 同步getter和setter,java,methods,synchronization,atomic,Java,Methods,Synchronization,Atomic,我想向您寻求有关高级同步的帮助。 我有这样的课: public class Manager{ private ClassMatcher classMatcher; public ClassMatcher getClassMatcher(){ return this.classMatcher; } public void setClassMatcher(ClassMatcher classMatcher){ this.classMa

我想向您寻求有关高级同步的帮助。 我有这样的课:

public class Manager{
    private ClassMatcher classMatcher;

    public ClassMatcher getClassMatcher(){
        return this.classMatcher;
    }
    public void setClassMatcher(ClassMatcher classMatcher){
        this.classMatcher = classMatcher;
    }
}
可以从更多线程调用对象管理器,因此应该同步getClassMatcher和setClassMatcher方法。 但在这种情况下,同一时间只能由一个线程访问getClassMatcher方法

有没有办法解决这个问题
也许我可以使用原子引用


感谢您提供的任何建议,这将非常有用

您不需要同步这些方法,但是类ClassMatcher应该是线程安全的


在您的情况下,调用get或set不会导致问题,因为set方法只会替换类成员对新对象的引用。

我看不出在这种示例中需要同步的任何原因,因为您的访问器对共享状态没有做太多工作,而共享状态确实会导致一些并发问题

例如,这里我们有竞争条件和需要的同步:

   public int get() {
      if (a == b) {
        return a;
      } else {
        return b;
      }
    }

PS:正如@shmosel所提到的,您可以将变量标记为
volatile
,以确保获得
classMatcher

的最实际版本。为什么您认为setter需要同步,为什么您认为这样做会影响getter?这种高级同步是如何实现的?还有,解决什么?使方法同步是处理访问
管理器
类的多个线程的一种方法。如果不清楚如何使用这些方法,就不可能提出正确的方法。您可能还想阅读,为了安全发布,可能需要将引用设置为volatile。同步(或其他措施)对于正确发布以及通过setter将更改可见性传递给其他线程可能是必要的。同步(或其他措施)可能是通过setter向其他线程正确发布和查看更改所必需的。或通过同步,或通过原子更新程序,或。。。埃里克是我的观点;你的回答不正确,充其量也不完整。