高效等待期貨清單
處理期貨清單時,目標是等到完成或發生任何未來都是例外。如果早期發生異常,涉及單獨呼叫 f.get() 的簡單方法可能會導致不必要的等待。
使用 CompletionService 避免不必要的等待
解決此問題問題,CompletionService 類別開始發揮作用。它允許執行非同步任務,並在其結果可用時以線程安全的方式檢索它們的結果。使用方法如下:
<code class="java">Executor executor = Executors.newFixedThreadPool(4); CompletionService<SomeResult> completionService = new ExecutorCompletionService<>(executor); // Submit tasks to the service for (int i = 0; i < 4; i++) { completionService.submit(new Callable<SomeResult>() { @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 < 4 && !errors) { Future<SomeResult> 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</code>
透過使用 CompletionService 方法,您可以即時監控任務的完成情況,並在發生錯誤時停止進一步處理,從而避免不必要的等待。
以上是如何有效率地等待期貨清單並處理異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!