我能从一个servlet生成一个线程吗?

7

在我提出主要问题之前,我想先问一个基本的问题。

假设我正在运行一个简单的Java程序,在主函数中生成一个线程。当主函数完成时,线程是否会继续运行?线程之间是否存在父/子关系的概念?

我有一个Servlet需要很长时间才能处理请求(5分钟)。我可以从主Servlet中生成一个后台线程来处理工作并尽快返回吗?即使主Servlet已经完成处理,后台线程还会继续运行吗?

2个回答

4

当你想让应用程序退出,即使你仍然有正在运行的线程时,你需要将你的线程标记为守护线程:

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

在应用服务器中这一点尤其重要,否则服务器无法关闭!

如果你经常这样做,你可能需要考虑使用线程池来使其更加高效。


2
  • 有父线程和子线程的概念,但您对此没有太多控制。例如,有InheritableThreadLocal,可以为线程层次结构存储变量。

  • 您可以从servlet中生成一个新线程。最好使用Java 5执行器框架。

  • 如果使用servlet 3.0,请查看其异步处理功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接