0
I HV下面的代碼如何在調用executorService.invokeAll(callables)時按順序獲取Future列表?
final ExecutorService executorService = Executors.newFixedThreadPool(ipAddressList.size());
final Set<Callable<JsonObject>> callables = new HashSet<Callable<JsonObject>>();
for (final String remoteHostName : ipAddressList)
{
callables.add(new Callable<JsonObject>() {
@Override
public JsonObject call()
throws ConnectionFailedException
{
return connectToHost(remoteHostName, options, attributes);
}
});
}
List<Future<JsonObject>> futures = null;
try
{
futures = executorService.invokeAll(callables);
}
catch (final InterruptedException e)
{...
}
for (final Future<JsonObject> future : futures)
{
..}
現在的問題是,可以在任何線程發生異常,但我沒有對哪個IP地址外的任何方法來識別。有沒有什麼辦法可以按照與可召集的順序相同的順序來獲得期貨。
有什麼想法?
甚至不要嘗試像依賴訂單那樣做一些脆弱而愚蠢的事情,但在例外中包含地址,例如?請注意,您正在使用'HashSet',所以您沒有訂單。 – Kayaman
雖然它可能不是*指定*,我認爲這個順序可能是相同的(如果你使用'List'而不是'HashSet',這將更容易檢查)。但我一般都認爲,除了短時間,高度可控的本地調試以外,您不應該依賴此類功能。 – Marco13
@Kayaman但是我從第三方APIC返回通用ExecutionException,我無法控制其添加IP地址 – abyin007