2011-01-29 4 views
6

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

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

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

ответ

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

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

  • Если вы используете сервлет 3.0, ознакомьтесь с его возможностями asynchronous processing.

4

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

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

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

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

Смежные вопросы