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