Встречается на собеседованиях • сегодня
Будет ли утекать память при блокировке двух потоков, ожидающих мониторы друг друга
Deadlock (взаимная блокировка) не приводит к утечке памяти, но вызывает зависание программы. Потоки блокируются навсегда, но память не утекает - объекты остаются в куче, просто недоступны.
Пример deadlock:
java
Object lock1 = new Object();
Object lock2 = new Object();
new Thread(() -> {
synchronized (lock1) {
synchronized (lock2) {} // Ждет lock2
}
}).start();
new Thread(() -> {
synchronized (lock2) {
synchronized (lock1) {} // Ждет lock1
}
}).start();
text
Проблемы:
1. Потоки вечно заблокированы
2. Приложение зависает
3. Ресурсы не освобождаются
Для предотвращения:
- Упорядочивайте блокировки
- Используйте tryLock() с таймаутом
- Применяйте deadlock detection
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы