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

Как наткнулся на Deadlock

Deadlock возникает, когда два или более потока блокируют друг друга, ожидая освобождения ресурсов. Классический пример:

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

Thread t1 = new Thread(() -> {
    synchronized (lock1) {
        synchronized (lock2) { // Ждёт lock2, который удерживает t2
            // Критическая секция
        }
    }
});

Thread t2 = new Thread(() -> {
synchronized (lock2) {
synchronized (lock1) { // Ждёт lock1, который удерживает t1
// Критическая секция
}
}
});

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

text

Признаки deadlock:
- Программа "зависает" без ошибок
- В дампах потоков (jstack) видно состояние "BLOCKED" и циклические зависимости блокировок

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

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

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

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