Как запустить несколько потоков из Java EE?

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

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

Robin 17.10.2008 17:51

Я часто задавался вопросом: нормально ли запускать потоки с сервера приложений? Я не нашел авторитетного ответа, поэтому надеюсь, что ваш вопрос скоро станет хорошей документацией по этой теме.

Limbic System 19.02.2009 22:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
2
4 708
6

Ответы 6

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по теме