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

Будет ли утекать память при блокировке двух потоков, ожидающих мониторы друг друга

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
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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