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

在这里查看解决方案

您必须实现自己的计数器才能知道您的索引是多少。

于 2011-04-15T18:42:10.490 回答
0

futures 以与提交的 callables 相同的顺序返回,因此 callables 列表和 futures 列表中的索引之间存在一一对应的关系。

您可以使用传统的 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 回答