2012-01-27 45 views
1

我感到困惑多線程的普遍適用性...適用性輯陣線程的具體場景中的一個java程序

我創建它執行一些代碼,已經保存在XML格式的應用。這項工作是使用Apache HTTP客戶端,並從網站上獲取一些數據... 1個多網站可以通過在XML代碼一塊被訪問......

現在我想,如果用戶已經創建了自己各自的編碼並將它們保存爲XML,然後每個用戶的'工作'(即xml格式的代碼塊)在單獨的線程中運行。

我有我的代碼來執行一個用戶的代碼......現在我想多個人的代碼可以並行運行。但我有一些疑問 -

(1)Apache HTTP客戶端提供了一種多線程通信方式,目前我只是簡單地使用默認的HTTP客戶端 - 同一個客戶端可以訪問多個網站,一個接一個 - 根據xml中的代碼塊。我是否認爲我不需要更改我的代碼,以便使用推薦的多線程通信?

(2)我想創建的servlet,當被調用時,執行的XML代碼一個塊的。所以要執行2個不同用戶給出的代碼塊,我將不得不調用這個servlet兩次。我將使用Amazon Elastic Beanstalk部署此應用程序,所以我感到困惑的是,我需要在我的程序中使用多線程嗎?我能不能簡單地從servlet調用現有的代碼(一次用於執行一段代碼)?我確實希望繼續處理不同的XML代碼塊,因此我不認爲我應該在這裏使用多線程。我的假設是否正確?

回答

1

根據您的第一個選項依次運行它不會被視爲「併發」。

來到servlet的方法,你怎麼描述它會同時工作的方式,但你也需要考慮有多少用戶同時進行?由於每個用戶都會有一個單獨的請求,因此多個呼叫會涉及一些網絡延遲。你需要考慮到所有這些因素之前,該選項

既然你有一個用戶的工作代碼走在前面,你可以定義具有的userid屬性的線程類。在run()方法中調用特定用戶作業的代碼。

現在創建兩個線程併爲每個線程設置適當的用戶標識並將其產生。

如果用戶的數量比較多,你可以看看使用Java的線程池執行人。

1

既然你要使用一個servlet容器,那麼它將爲你管理多線程。每個servlet請求都將在不同的線程中執行。在這種情況下,一個servlet調用將以單線程方式從提供的XML中的代碼塊執行。如果有多個網站在每個代碼塊中聲明,那麼它們將被連續訪問。其他用戶在同一時間可能會調用與第一個並行運行的其他代碼塊相同的服務器。