ホームページ >Java >&#&チュートリアル >先物のリストを効率的に待ち、例外を処理する方法は?
先物リストでの効率的な待機
先物リストを処理するときの目標は、完了または発生するまで待つことです。いかなる将来においても例外です。 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 サイトの他の関連記事を参照してください。