0

jersey-client を使用して非同期の rest-request を作成したいのですが、関数は Future を提供するので、私の理解では get を呼び出すことができ、リクエストが終了すると何かが返されます。

だから私は、先物をマップに保存し、1つのスレッドで時々それらを調べることができると考えています。または、誰かが非同期リクエストを送信するたびに新しいスレッドを作成する必要があるかもしれません。また、それが永遠に続くべきではないという要件もあります (タイムアウト)。

どう思いますか?

4

2 に答える 2

1

List<Future<Void>>私は先物を格納するために a をよく使用します。ブロックとしてget()、私はそれらをポーリングするのではなく、循環させます。

永久に続く必要があるという要件もあります (タイムアウト)。

永遠に続くべきではないという意味だと思います。これには、リクエストを行うために使用しているライブラリでのサポートが必要です。それらが中断される可能性がある場合は、待機中のスレッドまたは別の ScheduledExecutorService で未来をキャンセル (true) できます。それらが割り込みにならない場合は、スレッドを stop() する必要がありますが、最後の手段としてのみです

于 2012-07-26T07:43:55.873 に答える
0

javadocは次のように述べています。

Future は、非同期計算の結果を表します。計算が完了したかどうかを確認し、その完了を待機し、計算の結果を取得するためのメソッドが提供されています。結果は、計算が完了したときにメソッド get を使用してのみ取得でき、必要に応じて準備が整うまでブロックします。

したがって、採用する戦略を選択するのはあなた次第です。それは、ほとんどの場合、それらのリクエストで何をしたいかによって異なります。

Futureそれらを通過する前に、それらを反復可能な構造に配置できます。getそれぞれの結果を非常に高速に処理でき、待機中に他の先物が既に返されているかどうかを確認する必要がある場合は、それぞれをブロックすることが戦略になる可能性があります。

于 2012-07-26T07:50:48.303 に答える