2012-04-25 88 views
2

我有一個父線程。它的工作是排隊請求和init子線程。子線程應該從Web服務獲取數據並回調到父線程。父線程處理數據並啓動另一個子線程。問題在於回調方法中的所有內容都是由子線程而不是父線程處理的。有沒有辦法通過父線程來處理回調?換句話說,在調用回調方法而不處理它的情況下,子線程完成。從子線程回調父線程

回答

2

你需要一些設計,但對於初學者來說,如果主線程不會做任何事情,而是等待孩子完成,我就看不到子線程的要點。另一方面,如果主線程必須服務於更多的傳入請求,那麼它也不能提供來自子線程的回調。你將不得不重新考慮這一點。一個想法是一個線程收集請求並將它們推送到隊列中。子線程將它們的事件推送到相同的隊列,並且有一個單獨的線程處理隊列中的事件 - 子線程的請求和響應。

如果這樣的事情聽起來不錯,那麼千萬要用ExecutorService來處理排隊的工作。

+0

要檢查我的理解: 主題: 主 - 與用戶交互 - > 服務 - 隊列請求,並開始 - > 處理器 - 上顯示的數據 - 處理請求(得到web服務數據) - > 瀏覽器屏幕 我是否必須有這麼多的線程或它可以做得更簡單? – user1137146 2012-04-25 12:17:48

+0

你的意思是說你實際上有一個GUI線程,並想將長操作(WS調用)卸載到非GUI線程?這就是你要找的所有東西嗎? – 2012-04-25 12:20:52

+0

是的。我想知道的是,當我用某些線程成功從WS中獲取數據時,是否必須創建新線程來顯示數據,或者我可以調用我的父線程來完成此操作。我不希望WS線程處理顯示數據。 – user1137146 2012-04-25 13:02:30

0

由於Marko提到您可以使用具有Future引用的ExecutorService,因此您可以將運行作業的結果返回給其父線程。