class BadPerson {
public synchronized void say(GoodPerson good) {
System.out.println("把钱给我,放了你的人。");
good.give();
}
public synchronized void give() {
System.out.println("得到了钱,同时被警察抓了。");
}
}
class GoodPerson {
public synchronized void say(BadPerson bad) {
System.out.println("把我的人放了,我给你钱。");
bad.give();
}
public synchronized void give() {
System.out.println("人救回来,同时报案了。");
}
}
public class LockDeadDemo implements Runnable {
private BadPerson bad = new BadPerson();
private GoodPerson good = new GoodPerson();
public LockDeadDemo() {
new Thread(this).start() ;
good.say(bad); //new Thread(new LockDeadDemo()).start() ;
}
public void run() {
bad.say(good);
}
public static void main(String[] args) {
// new Thread(new LockDeadDemo()).start() ;
new LockDeadDemo();
}
}
以上程序,请问,命名bad.give()和good.give()这2同步方法都只调用了一次,为什么还是锁死。
例如调用bad.give()方法时,难道还有别的线程也在调用此方法,导致锁死吗.