Открыть новую тему в Tomcat - PullRequest
3 голосов
/ 10 июля 2011

Я просто задаю теоретический вопрос.

У меня есть операция, которая занимает некоторый период времени, который выполняется в каком-нибудь методе Servlet doGet / doPost или внутри контроллера Spring MVC. это хорошая идея, чтобы открыть новый фоновый поток и выполнить его там? Не вызовет ли это проблемы с производительностью?

Получу ли я какие-нибудь приличия, если бы в этом случае я использовал систему jBoss JMS?

Ответы [ 3 ]

3 голосов
/ 10 июля 2011

Все нормально (Tomcat не является контейнером JavaEE). Поскольку вы упоминаете Spring MVC, я предложу использовать @Async в методе, который вы хотите выполнить - новый поток будет порожден пружиной (что очень похоже на эквивалентную аннотацию JavaEE)

2 голосов
/ 10 июля 2011

В сервлете 3.0 введена асинхронная обработка, которая здесь поможет.

По сути, вы помечаете сервлет как поддерживающий асинхронную обработку, а затем используете контекст для запуска нового потока - контейнер делает это за вас, так что выне нужно ничего обрабатывать с потоками самостоятельно.

См. эту статью блога для идеи .Преимущество этого состоит в том, что ваш сервлет будет переносимым на полные контейнеры Java EE, которые не позволят вам запускать собственные потоки.

В противном случае рассмотрите возможность использования ExecutionService и друзей из java.util.concurrent.В настоящее время нет реальной причины использовать "new Thread ()" самостоятельно.

1 голос
/ 10 июля 2011

Ну, поскольку Tomcat - это не контейнер Java EE, а просто контейнер сервлетов, вы можете без проблем открывать новые потоки (кроме типичных проблем многопоточности, с которыми вам следует иметь дело;).

JMS - это решение для разделения модулей полноценного промежуточного программного обеспечения (совершенно нового времени выполнения), которое заботится о сообщениях. Этот подход может быть слишком сложным для вас, если вы просто хотите отделить один процесс по соображениям эффективности.

Если вы используете Spring 3.0, я бы предложил вам использовать асинхронные вызовы . Вы просто аннотируете метод bean-компонента с помощью @Async, и все готово:).

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