Я использую ExecutorCompletionService для отправки нескольких задач. Я хочу подождать max, скажем 5 секунд, а затем прекратить обработку.ExecutorCompletionService ждет n секунд max для завершения
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
на executorService
, но мой основной поток все еще ждет всех представленных задач для завершения и занимает 10 секунд для всех задач, которые должны быть завершены и гравюр имя каждого потока. Как я могу остановить обработку за 5 секунд?
Пробовали ли вы 'awaitTermination' следуют' shutdownNow'? – SpiderPig
btw. фьючерсы также имеют метод «отменить». – SpiderPig