Встречается на собеседованиях • сегодня
Как наткнулся на 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() с таймаутом
- Избегание вложенных синхронизированных блоков
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы