java - Servlet 中的线程和并发

标签 java multithreading servlets concurrency

我有一个 Web 应用程序,它从数据库中检索(大)结果列表,然后需要通过查看每个结果并丢弃“无效”结果来缩减列表。使结果“无效”的参数是动态的,我们无法将工作传递给数据库。

因此,一种想法是创建一个线程池和 ExecutorService 并同时检查这些结果。但我一直看到人们说“哦,规范禁止在 servlet 中生成线程”或“这只是个坏主意”。

那么,我的问题是:我应该做什么?我在一个 servlet 2.5 容器中,所以作为 3.0 规范一部分的所有异步好东西对我来说都不可用。编写一个我通过 JMS 与之通信的单独服务似乎有些矫枉过正。

在此寻求专家建议。

杰森

最佳答案

废话。

JEE 规范有很多“不应该”和“你不能”的地方。另一方面,Servlet 规范没有这些。 Servlet 规范更加狂野。它确实没有像 JEE 规范那样深入到实际操作方面。

我还没有看到一个 JEE 容器(要么是纯 servlet 容器 Tomcat/Jetty,要么是完整的船 ala Glassfish/JBoss)实际上阻止了我自己触发线程。 WebSphere 可能,它应该是相当臭名昭着的,但我没有使用过 WebSphere。

如果创建不守规矩、 self 管理的线程的概念让您发痒,那么完整的 JEE 容器内部有一个正式的“WorkManager”,可用于剥离线程。他们只是以不同的方式暴露它们。这是获取线程的更“循规蹈矩”的机制。

但是,坦率地说,我不会打扰。使用标准类库中的执行器可能会取得更大的成功。如果你用太多线程使你的系统饱和并且一切都失控了,那么,那是你的责任。不要那样做(tm)。

至于异步解决方案是否合适,我会赌一下。从您的帖子中不清楚是否是。但是您的问题是关于线程和 Servlet 的。

只管去做。请注意它“可能不可移植”,正确执行(使用 Executor),对其负责,容器不会变得更聪明,也不会更关心。

关于java - Servlet 中的线程和并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23617590/

相关文章:

c - 与 OpenMP 同步,For 指令

multithreading - 具有容器管理事务和工作线程的 MDB

java - 如何通过servlet转发socket连接?

java - Selenium Web 自动化 java 框架

java - 创建一个新的对象数组列表——Java中的初始化

multithreading - 主线程之外的 ThreadDelay

servlets - 是否有 Java Servlets 的可比替代品?

java - 当 pdf 生成失败时,向 portlet 资源响应提供错误页面

java - 避免重复提交Struts 2 jsp页面

java - 基于传递的字符串创建和返回对象