ExecutorCompletionService を使用していくつかのタスクを送信しています。次に、最大、たとえば 5 秒待ってから、処理を停止します。
ExecutorService executorService = Executors.newFixedThreadPool(10);
CompletionService<String> completionService = new ExecutorCompletionService<String>(
executorService);
List<Callable<String>> callables = createCallables(); //each callable sleeps randomly between 1-10 seconds and then prints the thread name
for (Callable<String> callable : callables)
taskCompletionService.submit(callable);
for (int i = 0; i < callables.size(); i++) {
Future<String> result = completionService.take();
System.out.println(result.get());
}
すべてのタスクが完了するまで 5 秒以上待ちたくありません。5 秒以内に完了したタスクの結果を収集したいだけです。どうすればそれを達成できますか?
executorService.shutdown();
executorService.awaitTermination(5, TimeUnit.SECONDS);
shutdown
とawaitTermination
onを使用しましexecutorService
たが、メイン スレッドは送信されたすべてのタスクが完了するまで待機し、すべてのタスクが完了するまでに 10 秒かかり、各スレッドの名前を出力します。5 秒で処理を停止するにはどうすればよいですか?