Предотвратить блокировку потоков в Tomcat - PullRequest
0 голосов
/ 12 декабря 2010

У меня есть сервлет Java, который действует как фасад для других веб-сервисов, развернутых в том же экземпляре Tomcat. Мой сервлет-обертка создает N дополнительных потоков, каждый из которых вызывает веб-сервис, сопоставляет ответ и отправляет его обратно клиенту. Все веб-сервисы развернуты на одном экземпляре Tomcat в качестве разных приложений.

Я вижу блокировку потоков в этой службе оболочки фасада после нескольких часов развертывания, что приводит к отключению экземпляра Tomcat. Все заблокированные темы являются конечными точками этого веб-сервиса фасада (например, http://domain/appContext/facadeService)

Есть ли способ управлять такой блокировкой потоков из-за нехватки доступных потоков, которые фактически выполняют обработку? Каковы наилучшие методы предотвращения таких тупиков?

1 Ответ

1 голос
/ 14 декабря 2010

Распространенным решением этой проблемы является использование Executor framework. Вы должны выразить свой вызов веб-службы как Callable и передать его исполнителю либо в том виде, в каком он есть, либо как Collection<Callable> (полный список параметров см. В Javadoc).

У вас есть два варианта управления временем. Во-первых, это использовать параметры соответствующего метода класса Executor, где вы указываете максимальное время ожидания веб-службы. Другой вариант - получить результат (который выражен как Future<T>) и использовать .get(long, TimeUnit), чтобы указать максимальное время, в течение которого вы можете ждать результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...