Sobes.tech
Junior — Middle

Имали ли сте случаи, когато сте се сблъсквали с взаимна блокировка на процеси в системи?

sobes.tech AI

Отговор от AI

Да, взаимната блокировка (deadlock) е ситуация, при която два или повече процеса или нишки завинаги чакат освобождаването на ресурси един от друг.

В Java това може да се случи при неправилна употреба на синхронизация, например когато два нишки се опитват да придобият два обекта-монитора в различен ред.

Пример:

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

Thread t1 = new Thread(() -> {
    synchronized(lock1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock2) {
            // работа
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized(lock2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock1) {
            // работа
        }
    }
});

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

За да избегнете deadlock, е важно да спазвате реда на придобиване на блокировките и да минимизирате времето за задържане на ресурсите.