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