3

这是我的用例。

  1. 客户端向服务器发送请求。
  2. 服务器需要做以下2.a。进行网络调用以获取一些数据 (D)。
    2.b。创建一个处理器 (P) 来处理数据。
  3. P 处理 D 并将响应发送回客户端

创建处理器很昂贵(大约 1-3 秒)。但它不依赖于数据 D.

我的计划是使用两个不同的线程并行执行网络调用和处理器的创建。

我从未在应用服务器中进行过多线程编程。我的问题是处理应用程序服务器(特别是 Tomcat 和 Jetty)中的线程的最佳方法是什么

谢谢。

4

3 回答 3

5

IMO 你最好的选择是使用Executor框架。这使得处理并发性变得更加容易。

这里有几个 教程可以帮助您入门。

您的代码在诸如 Tomcat 之类的 Web 容器中运行这一事实不应该过多打扰您。这意味着处理请求的实际线程实际上是一个工作线程,取自应用服务器本身管理的线程池。但是,只要您自己的线程干净地完成它们的工作(即仅修改仅限于该实际请求的数据并且不干扰其他外部线程),并且同时没有太多线程,一切都应该没事的。

于 2012-05-09T15:59:39.460 回答
4

Tomcat 7 支持 Servlet 3.0 并且它是异步 servlet - 它维护自己的线程池并提供标准 API 以在单独的线程中执行请求。您可以在此处查看示例:Tomcat 7 中的异步 Servlets

于 2012-05-09T16:02:57.607 回答
0

如果创建处理器 (P) 的成本很高,您能否像创建数据库连接池一样预先创建一个 P 实例池并重新使用它们?

Apache Commons Pool 项目可以为您提供一个起点。

于 2012-05-10T08:33:03.143 回答