ホームページ >Java >&#&チュートリアル >Java で Future のリストを効率的に管理し、例外を処理するにはどうすればよいですか?

Java で Future のリストを効率的に管理し、例外を処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 00:54:02952ブラウズ

How can I efficiently manage a list of Futures and handle exceptions in Java?

例外処理による Future のリストの効率的な管理

Java では、Future を操作するときに、Future タスクのリストが完了するまで待機する必要が生じる場合があります。発生した例外を処理しながら。これに対する簡単なアプローチは、それぞれの将来を順番に待ち、潜在的な例外をチェックすることです。ただし、このアプローチでは、リストの前半で例外が発生した場合、後続のタスクが依然として不必要に待機されるため、効率の問題が発生します。

これに対処するために、代替ソリューションでは CompletionService クラスを利用します。 CompletionService は、利用可能になると先物を受け取り、例外が発生した場合に早期終了できるようにします。

このアプローチの実装方法の例を以下に示します。

<code class="java">Executor executor = Executors.newFixedThreadPool(4);
CompletionService<SomeResult> completionService = new ExecutorCompletionService<>(executor);

// 4 tasks
for (int i = 0; i < 4; i++) {
    completionService.submit(new Callable<SomeResult>() {
        public SomeResult call() {
            // ... task implementation
            return result;
        }
    });
}

int received = 0;
boolean errors = false;

while (received < 4 && !errors) {
    Future<SomeResult> resultFuture = completionService.take(); // Blocks if none available
    try {
        SomeResult result = resultFuture.get();
        received++;
        // ... do something with the result
    } catch (Exception e) {
        // Log the exception
        errors = true;
    }
}

// Potentially consider canceling any still running tasks if errors occurred</code>

CompletionService を利用することによってを使用すると、例外を迅速に処理しながら、今後のタスクが完了するまで効率的に待つことができます。

以上がJava で Future のリストを効率的に管理し、例外を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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