2012-07-18 110 views
1

我有一个Java EE Web应用程序。现在,当一个特定的请求时(比如/ XYZ网址行话),我想要做复杂处理。第如下使用不同的线程在web应用程序中处理

的以下3个步骤每个都非常复杂,需要时间。

  1. 从DB.Table中的表中获取数据具有大量数据并且查询需要时间。
  2. 对其他webserive A进行Web服务调用并获取其数据。
  3. 对其他Webserice B进行另一个Web服务调用并获取其数据。
  4. 通过使用1个输出,2执行一些处理,3

1,2,和3彼此独立,以便能够并行地调用的。

现在的问题是:

  1. 我可以做业务1,2,3和三个独立的线程?
  2. 是否建议为每个请求创建3个线程?
  3. 我应该使用线程池吗?
+0

简单的方法是使用Ajax – nidhin 2012-07-18 17:56:52

+0

@Gray其100%现在:)我以前忘了接受它 – user978939 2012-07-18 18:03:47

+0

@nidhin:这与ajax无关。我需要给出一些输出o。如上所述,计算oi需要执行步骤1,2,3,4。 – user978939 2012-07-18 18:05:54

回答

1

为了解决您的第一个问题我经过4个步骤:

  1. 是的,如果你正在使用的数据库驱动程序允许并发访问,分别是安全的,从不同的线程使用。
  2. Web服务通常被设计来处理在同一时间不同的请求,因此这应该工作为好,这里的问题是,你要多少线程使用(它需要多长时间来处理一个请求)以及是否web服务会立即防范太多的请求。
  3. 这里同样适用。
  4. 是的,但你必须在这里做同步,如:等到所有线程都收到了他们的成果。你可以用java.util.concurrent.CyclicBarrier

第二个问题 这取决于你的数据,特别是Web服务将如何快速回答,你应该尝试一下意识到这一点。

第三个问题明确,那就是他们的东西。这也将帮助您构建您的应用程序。

1

1)我可以做三个独立的线程操作1,2和3? 是的,你可以。

2)它是建议创建3个线程为每个请求? 只要这些东西不依赖于彼此,并且只要你不依赖于在同一个交易中获得这些东西,那么它看起来应该没问题。当然,你将不得不处理一个或多个线程不成功的情况。你需要一个单独的看门狗线程来取消这些线程,如果它们花费太长时间或者如果一个线程出现故障。

3)我应该使用线程池吗? 无论你做什么,只要你使用线程,你应该使用一个池。这样,如果在线程没有完成或进入某种不良状态或变得不可用时出现问题,则可以保护应用程序免于用尽线程。