リクエストオブジェクトの配列リストがあります。それらをforループで実行し、ループ内でWebサービスを呼び出して、応答オブジェクトを別の配列リストに追加します。Webサービスに複数のリクエストを送信できるように、スレッドを実装する必要があります。
質問する
675 次
1 に答える
0
私はこれを自分で実際に試したことはありませんが、面白いかもしれないと思ったので、いじってみました。
List<RefundOrderResponse> responses = Collections.synchronizedList(new ArrayList<RefundOrderResponse>());
Executor e = Executors.newFixedThreadPool(10);
CompletionService<RefundOrderResponse> ecs = new ExecutorCompletionService<RefundOrderResponse>(e);
// Create some futures based on the requests we have that we want processed
List<Future<RefundOrderResponse>> futures = new ArrayList<Future<RefundOrderResponse>>();
for (final RefundOrderRequest request : requests)
{
futures.add(ecs.submit(new Callable<RefundOrderResponse>()
{
@Override
public RefundOrderResponse call () throws Exception
{
// do the call to the web service here and return the response
return soapWS.refundOrder(request);
}
}));
}
// Now we can process the response, note with a completion service we are assuming process order of responses is not very important.
for (int i = 0; i < futures.size(); i++) {
responses.add(ecs.take().get());
}
ここでは Java CompletionService を使用しましたが、より具体的にはExecutorCompletionServiceを使用しました (エグゼキューターを使用して並列で実行するため)。応答の処理は任意の順序で実行できることを前提としています。この場合は単に応答リストに追加するだけです。応答リストで何をするつもりかはわかりませんが、リストに追加する代わりにループで処理することができます。
于 2012-09-18T11:24:57.897 に答える