2012-07-18 141 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)我應該使用線程池嗎? 無論你做什麼,只要你使用線程,你應該使用一個池。這樣,如果在線程沒有完成或進入某種不良狀態或變得不可用時出現問題,則可以保護應用程序免於用盡線程。

相關問題