0

次のコードがあります。

for (int i = 0; i < nComp; i++) {
    Callable<Long> worker = new WSCaller(compConns[i]);
    col.add(worker);
}
List<Future<Long>> results=null;
results = executor.invokeAll(col, timeout, TimeUnit.SECONDS);

for (Future<Long> future : results) {
    if ( !future.isDone() ) {
        // here I need to know which future timed-out ...               
    }
}

コードで指摘されているように...どの Future がタイムアウトしたかを知るにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

future は送信された callable と同じ順序で返されるため、callable リストと future リストのインデックス間には 1 対 1 の対応があります。

従来の for ループを使用するか、

for (int i=0; i<results.size(); i++) {
   Future<Long> future = results.get(i);
   Callable<Long> callable = col.get(i);
}

またはインデックスを維持し、

int index = 0;
for (Future<Long> f: results) {
   Callable<Long> c = col.get(index++);
}
于 2011-04-15T18:53:46.153 に答える
0

ここで解決策を参照してください

現在のインデックスを知るには、独自のカウンターを実装する必要があります。

于 2011-04-15T18:42:10.490 に答える