高效等待期貨清單
處理期貨清單時,目標是等到完成或發生任何未來都是例外。如果早期發生異常,涉及單獨呼叫 f.get() 的簡單方法可能會導致不必要的等待。
使用 CompletionService 避免不必要的等待
解決此問題問題,CompletionService 類別開始發揮作用。它允許執行非同步任務,並在其結果可用時以線程安全的方式檢索它們的結果。使用方法如下:
Executor executor = Executors.newFixedThreadPool(4);
CompletionService completionService = new ExecutorCompletionService(executor);
// Submit tasks to the service
for (int i = 0; i () {
@Override
public SomeResult call() {
// Task logic here
return result;
}
});
}
int received = 0;
boolean errors = false;
// Loop until all tasks are complete or an error occurs
while (received resultFuture = completionService.take(); // Blocks if nothing available
try {
SomeResult result = resultFuture.get();
received ;
// Process result here
} catch (Exception e) {
// Log error
errors = true;
}
}
// Consider canceling remaining tasks if an error occurred
透過使用CompletionService方法,您可以即時監控任務的完成情況,如果發生錯誤,則停止進一步處理,從而避免不必要的等待。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3