Из официального FAQ :
Почему создание потоков и управление ими
запрещены
Спецификация EJB присваивает
EJB контейнер ответственность за
управление потоками. Разрешающее предприятие
экземпляры bean для создания и управления
темы будут мешать
способность контейнера контролировать его
жизненный цикл компонентов. Нить
управление не является бизнес-функцией,
это деталь реализации, и это
как правило, сложный и
платформы. Позволяя
Контейнер управления потоками снимает
корпоративный бин разработчик дилинга
с вопросами потоков. Многопоточный
приложения все еще возможны, но
управление многопоточностью находится
в контейнере, а не в
корпоративный бин.
Тем не менее, если проблема запуска и завершения работы не рассматривается, это отчасти "философский" вопрос в том смысле, что поток представляет собой подробность реализации , а также тот факт, что многопоточность является считается проблемой масштабируемости , которой должно управлять приложение. сервер.
Например, большинство приложений. серверы позволяют интегратору определять пулы и настраивать количество потоков и т. д. Приложение, которое порождает поток, само избегает этой конфигурации и плохо взаимодействует в плане масштабируемости.
Кроме того, если вам нужен одиночный фоновый поток в кластерной среде, он становится сложным.
И, наконец, приложение. Сервер контролирует транзакций . Если вы создаете потоки самостоятельно, вы должны позаботиться о том, чтобы понять все детали того, что можно использовать безопасно или нет (например, получить соединение из пула) и как использовать UserTransaction
при необходимости. Идея в том, что вам не стоит беспокоиться о таких деталях, если вы используете приложение. сервер, но вам понадобится, если вы сами начнете работать с потоками.
Однако я видел, как веб-приложение порождает фоновый поток из ServletContextListener
, и угадайте, что это нормально, даже если приложение было развернуто более чем на одном узле. Вам просто нужно понять, что значит запускать несколько JVM, и убедиться, что вы поддерживаете это правильно.