2011-12-30 28 views
1

在我的理解中:AsyncResult和Future的結果存儲在哪裏/如何?

用戶輪詢未來的對象,直到結果可用。另一方面,作業是同步執行的,結果應存儲在某個地方,直到下一次輪詢。結果存儲在哪裏?

遠程調用如何發生,即異步SOAP操作?結果「存儲」在服務器端多長時間?

回答

1

結果存儲在Future對象本身中。它不存儲在服務器端。

線程1向可執行程序提交一個Callable。這個執行器創建一個實現Future的Runnable,它包裝可調用對象及其未來結果。它會回報這個未來。

執行程序的線程2執行可運行的未來。運行時,將來會執行其封裝的可調用對象,並將可調用對象的結果存儲在其結果字段中。

線程1詢問未來的結果,未來返回結果字段中存儲的結果。

查看java.util.concurrent.FutureTask的源代碼和文檔。

+0

因此,這意味着對於遠程SOAP調用:結果將在服務器端的內存中,直到客戶端再次輪詢。同時,如果服務器崩潰導致丟失。 – 2011-12-30 21:15:25

+0

我在回答中說過,結果並不存儲在服務器端,而是未來本身。重新閱讀我的答案。雖然異步調用未執行,但沒有任何結果。一旦執行了異步調用,就會執行服務器遠程調用,結果會立即下載並在將來存儲。當主線程向未來詢問結果時,未來將返回其存儲的結果。 – 2011-12-30 21:19:05