哪个线程获取哪个对象的锁?
Which thread acquires lock on which object?
我是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' 引用的对象是否被锁定?
或
class'ThreadB'的实例被锁定了??
名为 demo 的 class Demo 实例被锁定。
同步方法令人困惑。我认为在大多数情况下最好使用显式锁定对象,例如
private void setX(){
System.out.println("hello");
synchronized (this) {
this.x = 42;
this.y = 37;
}
System.out.println("bye");
}
我是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' 引用的对象是否被锁定?
或
class'ThreadB'的实例被锁定了??
名为 demo 的 class Demo 实例被锁定。
同步方法令人困惑。我认为在大多数情况下最好使用显式锁定对象,例如
private void setX(){
System.out.println("hello");
synchronized (this) {
this.x = 42;
this.y = 37;
}
System.out.println("bye");
}