Встречается на собеседованиях • сегодня

Что такое DeadLock

DeadLock — ситуация, когда два или более потока блокируют друг друга, ожидая освобождения ресурсов, которые удерживают сами.

Пример:

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

Thread t1 = new Thread(() -> {
    synchronized (lock1) {
        try { Thread.sleep(100); } catch (Exception e) {}
        synchronized (lock2) { // Ждёт lock2, но он удерживается t2
            System.out.println("Thread 1");
        }
    }
});

Thread t2 = new Thread(() -> {
synchronized (lock2) {
try { Thread.sleep(100); } catch (Exception e) {}
synchronized (lock1) { // Ждёт lock1, но он удерживается t1
System.out.println("Thread 2");
}
}
});

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

text

**Причины:**  
- Взаимная блокировка (циклическая зависимость).  
- Отсутствие упорядоченного захвата ресурсов.  

**Как избежать:**  
- Использовать `Lock.tryLock()` с таймаутом.  
- Захватывать ресурсы в одинаковом порядке.  
- Уменьшать время удержания блокировок.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы