Когда ты подозреваешь дедлок в своём приложении, первый шаг — сгенерировать thread dump. Это захватит текущее состояние и стек вызовов всех потоков, работающих в JVM. В ситуации с дедлоком один или несколько потоков покажут сообщение deadlock в выводе дампа.
Способ генерации thread dump'а зависит от твоей среды:
kill -3 <process_id>Ctrl+Break в командной строкеДля автоматического обнаружения дедлоков можно использовать класс ThreadMXBean из JDK:
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
long[] deadlockedThreads = threadMXBean.findDeadlockedThreads();
if (deadlockedThreads != null && deadlockedThreads.length > 0) {
// Дедлок обнаружен
}
Если ты предпочитаешь графический подход без написания кода, используй JConsole (входит в состав JDK):
Выбор наиболее удобного подхода зависит от твоих задач: используй thread dump'ы из командной строки для быстрого расследования, ThreadMXBean — для встроенного мониторинга в production, а JConsole — для интерактивной отладки в процессе разработки.
Метод ThreadMXBean.findDeadlockedThreads() возвращает массив идентификаторов потоков, которые в настоящий момент находятся в состоянии deadlock, или null, если deadlock не обнаружен.
Новый — ещё не проверен сообществом
Вы