java - JSP Servlet多线程问题

标签 java multithreading jsp servlets thread-safety

我有一个 Servlet,它从客户端获取请求,然后 Servlet 通过 http 请求/响应从 5 个不同的服务器收集数据(每个服务器需要 1 秒来响应)并将数据发送回客户端。

问题在于客户端必须等待 6 秒才能响应,时间太长。 因此向 5 个 Server 的 5 个请求必须同时发送。

想法:

  1. Servlet 中的多线程,就像普通的 Java 应用程序一样。
  2. 每个服务器(请求)都有一个自己的 Servlet,以便 1 个主 Servlet 对 5 个 Gather Servlet 说“获取数据 xy”,然后收集 Servlet 将数据发送到主 Servlet,然后将主 Servlet 返回给客户端。

我担心的问题是,线程/servlet 从另一个请求获取响应,因为它具有相同的时间和相同的 ip。

如何解决这个问题?谢谢!

最佳答案

Multithreading in the Servlet

您可以使用ServletRequest#startAsync()将此请求置于异步模式,并使用原始(未包装的)ServletRequest 和 ServletResponse 对象初始化其 AsyncContext 的方法。

了解更多关于Servlet 3 0 final-spec - Section 2.3.3.3 - Asynchronous processing的信息其中有详细解释。

AsyncContextServlet 3.0 规范中定义的用于异步处理 HTTP 请求的标准方式。

<小时/>

了解更多关于Executors.newFixedThreadPool()的信息创建一个线程池,该线程池重用在共享无界队列上运行的固定数量的线程。在任何时候,最多 nThreads 个线程将处于 Activity 处理任务状态。如果在所有线程都处于 Activity 状态时提交其他任务,它们将在队列中等待,直到有线程可用。

请查看ExecutorService阅读有关它的更多信息以及示例代码。

Read more...

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

相关文章:

java - 将变量从 servlet 传递到 jsp 不起作用

java - 矩阵交换行 - Java

c++ - 带有任务调度程序的 IOCP(线程构建 block )

multithreading - 测试高并发工作线程系统的正确方法是什么?

windows - I/O完成端口* LAST *称为回调,或: where it's safe to cleanup things

java - 如何使用迭代器显示列表中的项目列表

java - 根据三个旋转器中的输入从一项 Activity 转移到另一项 Activity

java - 为什么/何时应该使用泛型方法?

java - 设置文本后保持 SWT 文本框大小

html - 使用jsp将mysql结果导出为ex​​cel/pdf/etc格式