Según lo que entiendo, el siguiente fragmento de código debe provocar un interbloqueo. El motivo es que cuando el hilo t1 bloquea el objeto estático firstData, ha adquirido un bloqueo en la clase. Entonces, cuando intente bloquear otro objeto estático secondData, la solicitud debería bloquearse.Bloqueo de miembros estáticos de una clase
Sin embargo, el programa se ejecuta bien y grabados *** Successfully acquired both the locks
¿Qué pasa con cierre para objetos estáticos que Im que falta aquí?
public class Deadlock {
public static void main(String[] args) {
Thread t1 = new Thread(new DeadlockRunnable());
t1.start();
}
}
class DeadlockRunnable implements Runnable {
static Object firstData = new Object();
static Object secondData = new Object();
public void run() {
synchronized(firstData) {
synchronized(secondData) {
System.out.println("*** Successfully acquired both the locks");
}
}
}
}
Para todos aquellos que respondieron que los bloqueos son el objeto, en lugar de la clase, por favor, eche un vistazo a this
Además, un solo hilo nunca producirá un interbloqueo. –
El siguiente enlace me hizo creer así: http://stackoverflow.com/questions/437620/java-synchronized-methods-lock-on-object-or-class –
Estoy de acuerdo con @KirkWoll. Pero tengo una pregunta. Entonces, ¿eso significa que un hilo puede bloquear múltiples objetos estáticos al mismo tiempo? – noMAD