我想请求您提供高级同步方面的帮助。 我有这样的课:
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 。
感谢您的任何建议,这将非常有帮助
答案 0 :(得分:-1)
您不需要同步这些方法,但类ClassMatcher应该是线程安全的。
调用get或set不会导致问题,因为set方法只将类成员的引用替换为新对象。
答案 1 :(得分:-1)
在这样的示例中,我看不出为什么需要同步的原因,因为访问者对共享状态没有太多工作,这实际上可能导致一些并发问题。
例如,这里我们需要竞争条件和同步:
public int get() {
if (a == b) {
return a;
} else {
return b;
}
}
PS:正如@shmosel所提到的,您可以将变量标记为volatile
,以确保获得()classMatcher
的最实际版本