Sobes.tech
Назад к вопросам
Junior — Middle
66

Бывали ли случаи, когда вы сталкивались с взаимной блокировкой процессов в системах?

Ответ от нейросети

sobes.tech 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, важно соблюдать порядок захвата блокировок и минимизировать время удержания ресурсов.