【问题标题】:Can i spawn a thread from a servlet?我可以从 servlet 生成线程吗?
【发布时间】:2011-01-29 10:43:30
【问题描述】:

在我开始我的主要问题之前,我想问一个基本问题。

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

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

【问题讨论】:

    标签: multithreading servlets


    【解决方案1】:

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

    线程 t = 新线程(myRunnable); t.setDaemon(true), t.start();

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

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

    【讨论】:

      【解决方案2】:
      • 有父线程和子线程之类的东西,但您对此没有太多控制权。例如InheritableThreadLocal,您可以在其中存储线程层次结构的变量。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        相关资源
        最近更新 更多