我有以下代码:
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 ...
}
}
正如代码中所指出的...我怎么知道哪个未来超时?
由于
答案 0 :(得分:0)
查看解决方案here
你必须实施自己的计数器才能知道你的目标是什么。
答案 1 :(得分:0)
期货的退回顺序与提交的可赎回方式相同,因此可赎回名单和期货清单中的指数之间存在一对一的对应关系。
您可以使用传统的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++);
}