Sobes.tech
Junior — Middle

¿Ha habido ocasiones en las que se haya enfrentado a bloqueos mutuos de procesos en sistemas?

sobes.tech AI

Respuesta de la IA

Sí, el bloqueo mutuo (deadlock) es una situación en la que dos o más procesos o hilos esperan indefinidamente a que se liberen recursos entre sí.

En Java, esto puede ocurrir por un uso incorrecto de la sincronización, por ejemplo, cuando dos hilos intentan adquirir dos objetos monitor en un orden diferente.

Ejemplo:

Object lock1 = new Object();
Object lock2 = new Object();

Thread t1 = new Thread(() -> {
    synchronized(lock1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock2) {
            // trabajo
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized(lock2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock1) {
            // trabajo
        }
    }
});

t1.start();
t2.start();

Para evitar deadlock, es importante seguir un orden en la adquisición de bloqueos y minimizar el tiempo de retención de recursos.