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向其他线程正确发布和查看更改所必需的。或通过同步,或通过原子更新程序,或。。。埃里克是我的观点;你的回答不正确,充其量也不完整。