Карта / Многопоточность / Проблемы многопоточности и мониторинг

Проблемы многопоточности и мониторинг

Deadlock (взаимная блокировка) — два потока намертво ждут друг друга. Поток 1 захватил замок A и ждёт B; поток 2 захватил B и ждёт A. Никто не отпустит — программа висит.

Поток 1 Поток 2 Замок A Замок B держит держит ждёт B ждёт A

Лечится тем, что все потоки захватывают замки в одном порядке (сначала A, потом B), или таймаутами.

Мониторинг. Дедлоки и зависшие потоки сложно поймать тестами — они проявляются под нагрузкой. Инструменты JDK для диагностики: jconsole, jstack (снимок стеков всех потоков — покажет, кто на чём заблокирован), VisualVM.

🎤 Закрыл тему, если можешь объяснить:
• что такое deadlock и как его избежать;
• чем можно продиагностировать зависший поток.