首頁 >Java >java教程 >如何有效率地等待期貨清單並處理異常?

如何有效率地等待期貨清單並處理異常?

Linda Hamilton
Linda Hamilton原創
2024-10-26 00:48:28988瀏覽

How to Efficiently Wait for a List of Futures and Handle Exceptions?

高效等待期貨清單

處理期貨清單時,目標是等到完成或發生任何未來都是例外。如果早期發生異常,涉及單獨呼叫 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn