在Java SE 7 Tutorial的Deadlock部分中,有一個示例,如下所示。我不明白爲什麼主要方法可以創建2 STATIC嵌套對象(實際上它被定義爲靜態嵌套類)。據說沒有任何靜態類的實例,對吧?誰能幫我嗎?謝謝。我可以創建多個STATIC嵌套對象嗎?
============================================== ============================================= Alphonse和Gaston是朋友,和偉大的信徒禮節。嚴格的禮貌規則是,當你向朋友鞠躬時,你必須保持鞠躬,直到你的朋友有機會歸還弓。不幸的是,這條規則沒有考慮到兩個朋友可能同時向對方低頭的可能性。這個示例應用程序,死鎖,模型這種可能性:
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();
}
}
死鎖時運行,這是非常有可能的是,當他們嘗試調用bowBack兩個線程將被阻塞。這兩個塊都不會結束,因爲每個線程都在等待另一個線程退出低頭。
很好的解釋。非常感謝。 – icepeanuts