В разделе «Тупик» в учебнике по Java SE 7 приведен пример, как показано ниже. Я не понимаю, почему основной метод может создать 2 STATIC вложенных объектов (на самом деле он определяется как статический вложенный класс). Говорят, что нет никакого экземпляра какого-либо статического класса, верно? Может кто-нибудь мне помочь? Благодарю.Могу ли я создать несколько объектов вложенных объектов STATIC?
==================================================================================================================================== =========================================== Альфонс и Гастон друзей и великих верующих в вежливости. Строгое правило вежливости заключается в том, что, когда вы кланяетесь другу, вы должны оставаться поклонившимся, пока ваш друг не сможет вернуть лук. К сожалению, это правило не учитывает возможность того, что двое друзей могут одновременно поклоняться друг другу. Этот пример приложения, Тупик, модели такая возможность:
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