哪个线程获取对哪个对象的锁定?

时间:2015-11-13 04:12:53

标签: java multithreading locking synchronized

我是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' 的实例被锁定?

1 个答案:

答案 0 :(得分:1)

名为demo的类Demo实例被锁定 同步方法令人困惑。我认为在大多数情况下最好使用显式锁定对象,例如

private void setX(){
   System.out.println("hello");
   synchronized (this) {
      this.x = 42;
      this.y = 37;
   }
   System.out.println("bye");
}