Как запустить несколько потоков из Java EE? - PullRequest
4 голосов
/ 17 октября 2008

Мне нужно масштабировать вызовы в Tomcat, и было предложено запускать потоки внутри. Кому-нибудь нужно было это сделать, и если да, то какие решения они придумали?

Ответы [ 6 ]

5 голосов
/ 17 октября 2008

Создание собственных потоков внутри сервера приложений обычно не рекомендуется, поскольку сервер должен управлять потоками для лучшей масштабируемости. Вы также можете столкнуться с проблемами, если контейнер делает предположения о том, что доступно в контексте потока, например информацию о безопасности (например, аутентифицированный субъект). Обычно это происходит, если вы порождаете поток, а затем используете ресурс сервера из этого потока, который неизвестен контейнеру.

Проверьте, есть ли способ получить потоки, управляемые контейнером, из Tomcat. WebLogic и WebSphere поддерживают commonj.WorkManager, который позволяет планировать работу с потоками, управляемыми контейнером. Spring также может использовать commonj, но я не уверен, доступна ли такая поддержка на Tomcat.

1 голос
/ 17 октября 2008

Вы не должны запускать потоки из своего веб-приложения, если у вас нет особой необходимости в этом. Без более подробной информации о вашей проблеме трудно сказать, является ли это правильным подходом к решению вашей проблемы.

Возможно, вы захотите взглянуть на Кварц , который " - это полнофункциональная система планирования заданий с открытым исходным кодом, которая может быть интегрирована или использоваться практически с любым J2EE или J2SE Приложение ».

1 голос
/ 17 октября 2008

Какую проблему вы пытаетесь решить с помощью потоков?

Если у вас есть долго выполняющиеся задачи, вы должны использовать JMS + полный контейнер Java EE.

Если вы пытаетесь справиться с избыточной нагрузкой, вы можете рассмотреть два экземпляра tomcat, однако, если вы используете сеансы http, вам нужно будет изучить репликацию сеансов.

Если вы вынуждены использовать Tomcat, рассмотрите возможность использования платформы Executors в java.util.concurrency.

1 голос
/ 17 октября 2008

Ваш вопрос немного расплывчатый. Tomcat уже использует пул потоков для обслуживания HTTP-запросов. Вы можете увеличить количество потоков с помощью конфигурации Tomcat - обратитесь к вики Tomcat за информацией об этом.

Если вы имеете в виду, что в своем коде вы хотите запускать потоки, то я советую изучить API java.util.concurrent, представленный в Java 5. Также прочитайте «Параллелизм Java на практике», который текст на эту тему.

0 голосов
/ 17 октября 2008

Абстракция J2EE для управляемой многопоточности: JCA . В частности, взгляните на классы WorkManager и Work. Смотрите также эта статья . Spring также предоставляет абстракцию менеджера работ, поддерживаемую JCA.

0 голосов
/ 17 октября 2008

, как просили другие, вы должны дать более подробную информацию о том, что вы пытаетесь достичь.

В противном случае, Tomcat использует пулы потоков. увеличить количество потоков в пуле. Используйте более новую версию Tomcat - 6.x. Используйте Java 6.0_10. При необходимости настройте приложение, используя профилировщик, и настройте настройки JVM, если это необходимо.

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