Java Servlet 线程

标签 java multithreading servlets producer-consumer

我已经完成了以下Java Servlet构建:[我相信主要思想是消费者-生产者]

  1. 接收多个 http POST 请求的 Java servlet

  2. 它将所有请求放入队列 [ConcurrentLinkedQueue]

  3. 队列中的所有请求都由单个独立的线程(如引擎)处理。该线程独立于 servlet 工作。 单独的线程有一个很好的理由,因为我需要来自多个不同的 http 请求的数据来进行处理。队列等待,直到有足够的请求,然后开始处理。

现在我进入了最后一步:例如,一次http请求No1已经被独立线程引擎处理了,我需要通知具体的servlet线程(例如No1)它来自哪里,以便我可以回复,即将响应发送回相应的客户端。

如何解决这个线程问题?单线程引擎如何每次通知正确的servlet线程?我应该如何编码?

最佳答案

我不知道这些要求从何而来,但是还有其他几种更简单的方法可以解决此问题:

  • 使用ExecutorService 。只需向池提交一个任务并在返回的 Future 上阻塞即可目的。非常简单有效。一旦您的任务准备就绪,Future.get() 将返回结果

  • 使用 Servlet 3.0,您可以将整个处理放在异步线程中。这更具可扩展性。基本上,您正在提交任务并立即释放 HTTP 线程。异步线程不仅处理该队列中的项目,还通过 AsyncContext 对象返回 HTTP 响应。

如果你确实需要使用队列和单独的线程,请查看 Java locksconditions 。但这是低级工作。

关于Java Servlet 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11600737/

相关文章:

javascript - 从 Javascript 向 Servlet 发送数据的问题

java - 如何使用文档和 mongo 聚合将 mongo shell 代码转换为 java 代码

java - 如何使用离线签名和 OCSP 响应创建 PADES

swift - AudioUnit回调与同步 : how to ensure thread safety with GCD

java - 线程同步问题

java - jetty AsyncProxyServlet/AsyncMiddleManServlet

java - 高效地处理所有游戏图 block 更新?

java - Eclipse 调试器变量不显示名称,仅显示值

ios - 我的 iOS 应用程序在使用多线程保存时挂起

java - Krajee 设计的 Bootstrap 文件输入 JQuery 插件(SyntaxError : Unexpected end of input)