私の目標は、10個(またはその他の任意の数)の非同期操作から結果のリストを取得することです。
私はcom.google.guava
並行してユーティリティに使用しています。誰かが私を正しい方向に丁寧に向けることができれば、私は大いに感謝するでしょう。
この例では、リストを取得しようとしていますsuccessfulBombs
(Bomb
ほとんど空のオブジェクトですが、サービス呼び出しの実行に関する問題をシミュレートするために作成すると、ランダムに問題がスローされる可能性があります)
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
List<ListenableFuture<Bomb>> bombs;
ListenableFuture<List<Bomb>> successfulBombs;
編集:
これは私がこれまでに思いついたものですが、いくつかの成功した要素が含まれているはずなのにリストは空です...理由がよくわかりません
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
List<ListenableFuture<Bomb>> bombs = new ArrayList<ListenableFuture<Bomb>>();
for(int i=0;i<10;i++)
{
ListenableFuture<Bomb> bomb = service.submit(new Callable<Bomb>(){
public Bomb call() throws Problem
{
return craftBomb();
}
});
}
ListenableFuture<List<Bomb>> successfulBombs = Futures.successfulAsList(bombs);
Futures.addCallback(successfulBombs, new FutureCallback<List<Bomb>>(){
public void onSuccess(List<Bomb> bombs)
{
System.out.println("My successful bombs");
for(Bomb b : bombs)
{
System.out.println(b);
}
}
public void onFailure(Throwable thrown)
{
System.err.println("There was a problem making this bomb.");
}
});
私が探しているものを締めくくるにあたり:
- 非同期操作を開始するための正しいパターン
- 結果の操作のリストを収集する
- guavaフレームワークを使用して成功した操作のリストを収集する