0

我正在尝试构建一个运行时间约为 15-20 分钟的 Java Servlet 任务,该任务从 HTML 表单中获取参数。我对此有几个问题:

  1. 即使在用户关闭浏览器后,任务还会继续运行吗?我用谷歌搜索了这个,似乎即使在浏览器关闭后该过程仍将继续执行。我只是想确认一下。

  2. 在寻找上述问题的答案时,我遇到了一个帖子(或其中几个),上面写着对于这种“密集”(我认为我的密集,因为它需要大约 15-20 分钟才能完成)任务,它是最好让一个单独的程序运行该任务,而不是将其包含在 servlet 程序中。那么,我只是从 servlet 类中执行另一个 Java 程序吗?

现在我的最后一个问题是,多个用户请求是否会相互独立地处理?例如,servlet 是否会为每个请求提供一个单独的线程或实例?如果是这样,我从 servlet 类执行另一个 Java 程序会导致任何问题吗?

4

1 回答 1

2

有几个项目需要讨论,每个项目都有自己的(部分)解决方案:

  • 如果浏览器关闭,您真的希望任务继续吗?为任务生成一个新线程(在浏览器已经关闭时尝试写入浏览器输出流将使线程在异常中死亡)参见执行程序
  • 您是否希望并行处理并发请求?多少个并行?请参见ThreadPoolExecutor
  • 您想在长时间运行的任务期间向浏览器(用户)提供反馈吗?请参阅异步 servlet

servlet 容器将确保并行请求在各自的线程中同时处理。但它们将共享 Servlet 类的实例。因此,您必须使您的代码线程 安全

关于运行“单独的 java 程序”或将任务保留在 servlet 中:最佳实践是将程序中的不同任务分隔在不同的部分中。为长期运行的任务创建一个新类比将其保留在 servlet 类中要好。请参阅关注点分离

于 2013-09-09T07:02:50.627 回答