2011-12-30 2 views
1

私の理解では:ここで/ AsyncResultとFuturesの結果はどのように格納されますか?

結果が利用可能になるまで、ユーザーは将来のオブジェクトをポーリングします。もう一方の側では、ジョブは同期して実行され、結果は次のポーリングまでどこかに格納されます。結果はどこに保存されていますか?

リモート呼び出し、つまり非同期SOAP操作ではどうなりますか?結果がサーバー側に「保存」されている期間は?

答えて

1

結果はFutureオブジェクト自体に格納されます。サーバー側には格納されません。

スレッド1は、呼び出し可能ファイルを実行者に送信します。このエグゼキュータは、Futureを実装し、呼び出し可能なものと将来の結果をラップするRunnableを作成します。この未来を返します。

executorからのスレッド2は、実行可能な将来を実行します。実行されると、未来はラップされた呼び出し可能コードを実行し、呼び出し可能コードの結果を結果フィールドに格納します。

スレッド1は未来の結果を要求し、未来は結果フィールドに格納した結果を返します。

java.util.concurrent.FutureTaskのソースコードとドキュメントを参照してください。

+0

これは、リモートSOAP呼び出しでは、クライアントが再びポーリングするまで、結果はメモリ内のサーバー側にあることを意味します。一方、サーバークラッシュの結果が失われた場合。 –

+0

私は私の答えで、結果はサーバー側には保存されていませんが、将来は自分自身であると言いました。私の答えをもう一度読んでください。非同期呼び出しは実行されませんが、どこにも結果はありません。非同期呼び出しが実行されると、サーバーのリモート呼び出しが実行され、結果がすぐにダウンロードされ、将来格納されます。メインスレッドがその結果を将来に尋ねると、未来はそれが格納した結果を返します。 –

関連する問題