【发布时间】:2014-04-10 16:03:03
【问题描述】:
以下代码 sn-p 取自 Java Tutorials,它表示线程永远保持阻塞状态,但我无法弄清楚如何。请解释一下。
两个同步方法是否共享相同的内在锁?
public class Deadlock {
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void bow(Friend bower) {
System.out.format("%s: %s"
+ " has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower) {
System.out.format("%s: %s"
+ " has bowed back to me!%n",
this.name, bower.getName());
}
}
public static void main(String[] args) {
final Friend alphonse =
new Friend("Alphonse");
final Friend gaston =
new Friend("Gaston");
new Thread(new Runnable() {
public void run() { alphonse.bow(gaston); }
}).start();
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
}
}
【问题讨论】:
-
如果你在这个网站上搜索“alphonse gaston”,你会发现你的问题已经被问了几十次了。
-
请注意,教程中说:“两个线程在尝试调用 bowBack 时会阻塞”(重点是我的)。所以每次运行都不能保证死锁。
标签: java synchronization deadlock