Получить идентификаторы Futures в Java - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть следующий код:

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 ...               
    }
}

Как указано в коде ... Как я могу узнать, какой тайм-аут в будущем?

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

Фьючерсы возвращаются в том же порядке, что и отправленные вызываемые элементы, поэтому между индексами в списке вызываемых и списке фьючерсов существует однозначное соответствие.

Вы можете использовать традиционный цикл 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++);
}
0 голосов
/ 15 апреля 2011

см. Решение здесь

Вы должны внедрить свой собственный счетчик, чтобы знать, какой индекс у вас до.

...