A continuación se muestra un código directamente de los tutoriales de Sun que describen Interbloqueo. Sin embargo, no entiendo cómo se puede producir un punto muerto en esta situación considerando que ambos métodos están sincronizados. ¿Cómo estarían dos Threads dentro de los mismos métodos sincronizados al mismo tiempo?Una pregunta acerca de los tutoriales de Interbloqueo del Sol
Deadlock describe una situación en la que dos o más hilos están bloqueados para siempre, esperándose unos a otros. Aquí hay un ejemplo.
Alphonse y Gaston son amigos y grandes creyentes en cortesía. Una regla estricta de cortesía es que cuando te inclines ante un amigo, debes permanecer encorvado hasta que tu amigo tenga la oportunidad de devolver el arco. Desafortunadamente, esta regla no explica la posibilidad de que dos amigos se dobleguen al mismo tiempo. Este ejemplo de aplicación, punto muerto, los modelos de esta posibilidad:
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();
}
}
Cuando se ejecuta punto muerto, es muy probable que ambos hilos bloquearán cuando intentan invocar bowBack. Ninguno de los bloques terminará nunca, porque cada hilo está esperando que el otro salga del arco.
posible duplicado de [Tratando de envolver mi pequeño cerebro sobre cómo los hilos se estancan]] (http://stackoverflow.com/questions/749641/trying-to-wrap-my-wee-brain-around-how-threads-deadlock) –