Попытка отладить состояние гонки, в котором ни одна из потоков опроса нашего приложения никогда не возвращается, что приведет к тому, что будущие участники не смогут заплатить за них. В абстрактных терминах, чтобы скрыть нашу бизнес-логику при решении проблемы, вот что такое наш путь к коду.ThreadPoolExecutor висит
Мы должны обновить некоторое состояние X ресурса Y на удаленном сервере. У нас есть менеджер ресурсов, который изменяет состояние ресурса и обновляет X как побочный эффект изменения. Этот менеджер постоянно проверяет ресурс, и когда он считает, что ресурс обновлен, он использует команду ThreadPoolExecutor
для выполнения этой работы. Этот исполнитель пула потоков имеет достаточно строчную очередь блокировки, но довольно небольшое количество максимальных потоков. Привязка себя от дампа потока происходит в вызове invokeAll (между прочим)
У нас есть основания полагать, что количество потоков core/max в этом исполнителе пула занято другими вещами (больше обновлений состояния ресурсов, если вы).
Поскольку invokeAll возвращает нам фьючерсы, на которые мы ждем, вопрос заключается в том, что invokeAll зависает, даже если структура блокирующих данных, используемая исполнителем, достаточно велика для выполнения работы, переданной через invokeAll, но нет доступных потоков?
Опубликовать код. – raffian