Future のリストの早期終了を待機
Future で表される非同期タスクを扱う場合、多くの場合、すべての処理が終了するまで待機することが重要です。完了するか、エラーが発生します。ただし、エラーが発生した後でもすべてのタスクが完了するまで不必要に待つことは望ましくありません。
この問題に対処するには、次の手順を検討してください。
CompletionService:
先物を順次監視します:
キャンセル残りのタスク:
次に例を示します。このアプローチを示します:
<code class="java">Executor executor = Executors.newFixedThreadPool(4); CompletionService<SomeResult> completionService = new ExecutorCompletionService<SomeResult>(executor); // 4 tasks for(int i = 0; i < 4; i++) { completionService.submit(new Callable<SomeResult>() { public SomeResult call() { // Processing code return result; } }); } int received = 0; boolean errors = false; while(received < 4 && !errors) { Future<SomeResult> resultFuture = completionService.take(); // Blocks until available try { SomeResult result = resultFuture.get(); received ++; // Process the result } catch(Exception e) { // Log or handle the error errors = true; } if (errors) { // Cancel any remaining tasks executor.shutdown(); break; } }</code>
以上が先物を扱う際にエラーや早期終了を効率的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。