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

Что такое дедлок

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

Условия возникновения:

  1. Взаимная блокировка — потоки удерживают ресурсы и ждут другие.
  2. Удержание и ожидание — поток держит один ресурс и ждёт другой.
  3. Отсутствие вытеснения — ресурсы нельзя отобрать у потоков.
  4. Круговая зависимость — потоки образуют замкнутый цикл ожидания.

Пример:

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

Thread t1 = new Thread(() -> {
    synchronized (lock1) {
        synchronized (lock2) { // Ждёт lock2, но его держит t2
            System.out.println("Thread 1");
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized (lock2) {
        synchronized (lock1) { // Ждёт lock1, но его держит t1
            System.out.println("Thread 2");
        }
    }
});

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

Как избежать:

  • Упорядочивание блокировок (всегда брать lock1, потом lock2).
  • Использование tryLock() с таймаутом.
  • Отказ от вложенных синхронизаций.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы