在Tomcat / Jetty中进行多线程的正确方法

时间:2012-05-09 15:51:52

标签: java multithreading tomcat jetty

这是我的用例。

  1. 客户端向服务器发送请求。
  2. 服务器需要执行以下操作 2.A.进行网络呼叫以获取一些数据(D) 2.B.创建处理器(P)以处理数据。
  3. P处理D并将响应发送回客户端
  4. 创建处理器很昂贵(大约1-3秒)。 但它不依赖于数据D.

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

    我从来没有在app服务器中完成多线程编程。我的问题是在应用服务器(特别是Tomcat和Jetty)中处理线程的最佳方法是什么

    感谢。

3 个答案:

答案 0 :(得分:5)

IMO最好的办法是使用Executor框架。这使得处理并发变得更加容易。

以下是couple of tutorials,可帮助您入门。

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

答案 1 :(得分:4)

Tomcat 7支持Servlet 3.0及其异步servlet - 它维护自己的线程池,并提供标准API以在不同的线程中执行请求。您可以在此处查看示例:Async Servlets in Tomcat 7

答案 2 :(得分:0)

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

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