在我提出主要问题之前,我想先问一个基本的问题。
假设我正在运行一个简单的Java程序,在主函数中生成一个线程。当主函数完成时,线程是否会继续运行?线程之间是否存在父/子关系的概念?
我有一个Servlet需要很长时间才能处理请求(5分钟)。我可以从主Servlet中生成一个后台线程来处理工作并尽快返回吗?即使主Servlet已经完成处理,后台线程还会继续运行吗?
在我提出主要问题之前,我想先问一个基本的问题。
假设我正在运行一个简单的Java程序,在主函数中生成一个线程。当主函数完成时,线程是否会继续运行?线程之间是否存在父/子关系的概念?
我有一个Servlet需要很长时间才能处理请求(5分钟)。我可以从主Servlet中生成一个后台线程来处理工作并尽快返回吗?即使主Servlet已经完成处理,后台线程还会继续运行吗?
当你想让应用程序退出,即使你仍然有正在运行的线程时,你需要将你的线程标记为守护线程:
Thread t = new Thread(myRunnable); t.setDaemon(true), t.start();
在应用服务器中这一点尤其重要,否则服务器无法关闭!
如果你经常这样做,你可能需要考虑使用线程池来使其更加高效。
有父线程和子线程的概念,但您对此没有太多控制。例如,有InheritableThreadLocal
,可以为线程层次结构存储变量。
您可以从servlet中生成一个新线程。最好使用Java 5执行器框架。
如果使用servlet 3.0,请查看其异步处理功能。