gpt4 book ai didi

java - 从 Java Servlet 委派工作负载

转载 作者:行者123 更新时间:2023-12-02 06:45:22 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

Servlet 容器将确保并行请求同时处理,每个请求都在自己的线程中处理。但他们会共享Servlet类的实例。因此,你必须将你的代码设置为 thread safe .

关于运行“单独的 java 程序”或将任务保留在 servlet 中:最佳实践是将程序中的不同任务分隔在不同的部分中。为长时间运行的任务创建一个新类比将其保留在 servlet 类中更好。请参阅Separation of concerns .

关于java - 从 Java Servlet 委派工作负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18692208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com