Могу ли я создать поток из сервлета? - PullRequest
7 голосов
/ 29 января 2011

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

Допустим, я запускаю простую Java-программу, которая порождает поток в основной функции.Будет ли поток продолжать работать после завершения основной функции?Есть ли понятие родительских / дочерних отношений между потоками.

У меня есть сервлет, который долго обрабатывает запрос (5 ​​минут).Могу ли я создать фоновый поток из основного сервлета, чтобы справиться с работой и вернуться в ближайшее время.Будет ли фоновый поток продолжать работать, даже когда основной сервлет завершит обработку?

Ответы [ 2 ]

4 голосов
/ 29 января 2011

Если вы хотите, чтобы ваше приложение завершало работу, даже если у вас все еще есть запущенные потоки, у вас есть , чтобы пометить вашу ветку как ветку демона:

Thread t = new Thread(myRunnable);
t.setDaemon(true),
t.start();

Это особенно важно, когда вы делаете это на сервере приложений, иначе сервер не может быть выключен!

Если вы делаете это неоднократно, вы можете рассмотреть ThreadPool, чтобы сделать это более эффективным

2 голосов
/ 29 января 2011
  • Существует такая вещь, как родительские и дочерние потоки, но вы не можете контролировать это.Например, есть InheritableThreadLocal, где вы можете хранить переменные для иерархии потоков.

  • вы можете создать новый поток из сервлета.Предпочитайте среду исполнения Java 5

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

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