同步getter和setter

时间:2017-08-18 19:29:31

标签: java methods synchronization atomic

我想请求您提供高级同步方面的帮助。 我有这样的课:

public class Manager{
    private ClassMatcher classMatcher;

    public ClassMatcher getClassMatcher(){
        return this.classMatcher;
    }
    public void setClassMatcher(ClassMatcher classMatcher){
        this.classMatcher = classMatcher;
    }
}

可以从更多线程调用对象管理器,因此应该同步方法: getClassMatcher setClassMatcher 。 但在这种情况下,方法 getClassMatcher 只能由一个Thread同时访问。

有什么方法可以解决它吗?
也许我可以使用锁定 AtomicReferences

感谢您的任何建议,这将非常有帮助

2 个答案:

答案 0 :(得分:-1)

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

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

答案 1 :(得分:-1)

在这样的示例中,我看不出为什么需要同步的原因,因为访问者对共享状态没有太多工作,这实际上可能导致一些并发问题。

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

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

PS:正如@shmosel所提到的,您可以将变量标记为volatile,以确保获得()classMatcher的最实际版本