En primer lugar, here's a sample:¿Cómo funciona el trabajo sincronizado en Java
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();
}
}
Lo que no entiendo es cómo se produce la obstrucción. La función principal inicia dos hilos que cada uno comienza sus propios arcos.
¿Qué es exactamente el bloqueo "sincronizado"? La misma función que se ejecuta para el mismo objeto (como originalmente pensé)? La misma función para todos los objetos de la misma clase? Todas las funciones sincronizadas para el mismo objeto? Todas las funciones sincronizadas para todos los objetos de la misma clase?
Ayúdame aquí.
Oh ok. Entonces la cerradura pertenece a todo el objeto. No sé por qué pensé que solo eran llamadas al mismo método sincronizado para un objeto dado que están bloqueadas. Supongo que eso responde mi pregunta. –
El objeto no realiza sincronización/bloqueo, sino que es el hilo. –
En realidad, he hablado específicamente sobre el hilo que adquiere el bloqueo, pero veo que parte de mi lenguaje es inexacto. Lo dejaré más claro. – Eddie