在我提出主要问题之前,我想问一个基本问题。
让我们说我正在运行一个简单的Java程序,它在main函数中生成一个线程。主函数完成后,线程是否会继续运行? 线程之间是否存在父/子关系的概念。
我有一个servlet需要很长时间来处理请求(5分钟)。我可以从主servlet生成后台线程来处理工作和工作。很快回来。即使主servlet已完成处理,后台线程是否仍会继续运行?
答案 0 :(得分:4)
如果您希望应用程序退出,即使您仍然有运行的线程,有将您的线程标记为守护程序线程:
Thread t = new Thread(myRunnable); t.setDaemon(true), t.start();
在应用程序服务器中执行此操作时尤为重要,否则无法关闭服务器!
如果你反复这样做,你可能会考虑使用ThreadPool来提高效率
答案 1 :(得分:2)
有父子线程这样的东西,但是你没有很多控制权。例如,有InheritableThreadLocal
,您可以在其中存储线程层次结构的变量。
您可以从servlet中生成一个新线程。首选Java 5执行器框架
如果使用servlet 3.0,请查看其asynchronous processing功能。