Это не является свидетельством тупика.
Таймер-2 получил блокировку для объекта TaskQueue
и ожидает уведомления об этом же объекте.Действительно, если бы поток не удерживал блокировку в точке, которую он назвал Object.wait()
, он получил бы IllegalMonitorStateException
.
Я не говорю, что ваше приложение вообще не заблокировано.Однако два потока «Timer-1» и «Timer2-» оба ожидают, когда другие потоки уведомят их.Это не классический тупик, где каждый из двух потоков будет ожидать, пока другой освободит блокировку.
Что еще я могу выяснить?
Ну, судя по коду java.util.Timer
:
Поток "Таймер-2" просто ожидает следующего запуска таймера.Это абсолютно нормальное поведение для Timer
.
Поток "Таймер-1" находится в процессе выполнения задачи таймера.Похоже, что он пытается создать соединение NSQ с (предположительно) удаленной службой.Если это блокировка, это, вероятно, означает, что служба, к которой она пытается подключиться, по какой-то причине недоступна.
Не так много можно почерпнуть из дампов стека.... не копаясь в исходном коде "com.trendrr.nsq".
Есть ли какая-нибудь идея, которая может быть использована для поиска причины?
- Посмотрите файлы журналов.
- Проверьте настройки (или что-то еще), чтобы выяснить хост / порт службы, к которой он пытается подключиться.
- Убедитесь, что служба запущена
- Убедитесь, что она доступна с клиента
- Глубокое погружение исходного кода
- Отладка, почесать голову и так далее.
- В крайнем случае нанять консультанта.