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