您可以使用CompletableFuture爲您的使用情況
static CompletableFuture<Object> anyOf(CompletableFuture<?>... cfs)
返回完成時任 給出CompletableFutures的完整的新CompletableFuture,與同結果。否則,如果 它異常完成,則返回的CompletableFuture也會執行 ,因此,帶有此異常的CompletionException將作爲其原因。 如果沒有提供CompletableFutures,則返回一個不完整的 CompletableFuture。
您應該將所有期貨存儲在列表中。 `
現在
List<CompletableFuture<?>> futureList = // all futures;
while(futureList.size()>0){
CompletableFuture<?> completed = CompletableFuture.anyOf(futureList); //convert futureList to array
if(completed.isCompletedExceptionally()){
// first future that completed with an exception
}else{
//future completed without exception, store the result or process
futureList.remove(completed); // remove it from the incomplete list
}
}
您可能獲得CompletableFuture
像
final CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
//...long running...
return "returnVal";
},
executor); //here executor is your executor pool
如果你不想使用明確的執行池
final CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
//...long running...
return "returnVal";
});
然而,在這種情況下,將提交至ForkJoinPool.commonmonitor()
爲什麼不包裹你的可調用函數並在包裝器中處理每個錯誤? –