我是java的新手,我真的很困惑线程获得的锁。我真的没有得到,调用者对象是否被锁定或被调用对象是否被锁定?
例如:
public class ThreadA {
public static void main(String[] args) {
ThreadB b = new ThreadB();
b.start();
}
}
class ThreadB extends Thread {
int total;
Demo demo = new Demo();
public void run() {
demo.setX();
}
}
class Demo {
private synchronized void setX(){
System.out.println("hello");
}
}
那么,引用' demo' 引用的对象是否会被锁定?
或
班级' ThreadB' 的实例被锁定?
答案 0 :(得分:1)
名为demo的类Demo实例被锁定 同步方法令人困惑。我认为在大多数情况下最好使用显式锁定对象,例如
private void setX(){
System.out.println("hello");
synchronized (this) {
this.x = 42;
this.y = 37;
}
System.out.println("bye");
}