Многопоточность middle
Deadlock — как возникает?
Ответ
Два+ потока ждут друг друга. Условия Коффмана. Избежать: упорядочить захват мониторов, tryLock с таймаутом. Обнаружение: jstack, VisualVM, Thread.getState().
Разбор: Классический дедлок возникает при одновременном выполнении условий Коффмана, прежде всего circular wait: поток A держит ресурс 1 и ждёт ресурс 2, а поток B держит 2 и ждёт 1. Лечится упорядочиванием захвата мониторов или tryLock с таймаутом; обнаруживается через jstack. Дистракторы подменяют это другими сбоями: незавершённым unlock, мнимой самоблокировкой (synchronized и ReentrantLock как раз реентерабельны для своего потока) и исчерпанием пула — это не дедлок мониторов.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.