我可以从servlet生成一个线程吗?

时间:2011-01-29 10:43:30

标签: multithreading servlets

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

让我们说我正在运行一个简单的Java程序,它在main函数中生成一个线程。主函数完成后,线程是否会继续运行? 线程之间是否存在父/子关系的概念。

我有一个servlet需要很长时间来处理请求(5分钟)。我可以从主servlet生成后台线程来处理工作和工作。很快回来。即使主servlet已完成处理,后台线程是否仍会继续运行?

2 个答案:

答案 0 :(得分:4)

如果您希望应用程序退出,即使您仍然有运行的线程,将您的线程标记为守护程序线程:

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

在应用程序服务器中执行此操作时尤为重要,否则无法关闭服务器!

如果你反复这样做,你可能会考虑使用ThreadPool来提高效率

答案 1 :(得分:2)

  • 有父子线程这样的东西,但是你没有很多控制权。例如,有InheritableThreadLocal,您可以在其中存储线程层次结构的变量。

  • 您可以从servlet中生成一个新线程。首选Java 5执行器框架

  • 如果使用servlet 3.0,请查看其asynchronous processing功能。