ホームページ >Java >&#&チュートリアル >先物のリストを効率的に待ち、例外を処理する方法は?

先物のリストを効率的に待ち、例外を処理する方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 00:48:28991ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。