如果我在一个类中有一个同步方法,则同步仅应用于该类或该方法正在修改的对象。
例如,如果我有如下的A类
public class A {
private int x;
public void setX(int x) {
this.x = x;
}
}
并且有两个B和C类,它们具有某种方法来设置x的值。喜欢
public class B implements Runnable {
private A a;
public B(A a) {
this.a = a;
}
public synchronized void setX(A a) {
int tempX = 0;
.... //Some logic to calculate tempX value
a.setX(tempX);
}
@Override
public void run() {
this.setX(a);
}
}
C类还将具有一个同步方法来设置x的值。
现在,如果我创建一个对象A并将相同的对象传递给B和C,那么同步是否也会在对象a上发生,或者我们需要同步类A的setX。
注意:由于我正在学习线程,所以如果问题听起来很愚蠢,请忍受。我只是想了解如果调用同步方法会发生什么情况。
您显示的代码与的实例同步B
。大概您的其他方法将在的实例上同步C
。因此,您正在查看两个单独的锁-这些方法根本不会将彼此锁定,并且您还没有真正同步任何东西。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句