Как избежать deadlock?

Ответ

Самое простое — захватывать ресурсы в едином порядке (например, по ID). Тогда циклический wait невозможен. Альтернатива — tryLock с таймаутом (ReentrantLock).

Разбор: Deadlock устраняют, разрывая условие циклического ожидания: захватывать ресурсы в едином глобальном порядке (например, по ID) либо использовать tryLock с таймаутом у ReentrantLock. Ловушка: приоритеты потоков не разрывают цикл удержания/ожидания и могут лишь усугубить starvation; synchronized-метод — это всё та же блокировка на мониторе, а взаимоблокировка возникает при захвате двух разных мониторов в разном порядке; deadlock вызывается порядком захвата, а не дефицитом ресурсов.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться