2014-09-08 1 views
0

Когда происходит тайм-аут, я знаю, что вызываемые задачи, которые в настоящее время выполняются на этих пяти потоках, будут прерваны. Что будет с остальными 10 задачами?Оставшиеся задачи службы-исполнителя после таймаута

Похоже, что оставшиеся задачи просто удаляются из очереди внутренних задач. Я не могу найти документацию, которая объясняет это подробно.

ExecutorService service = Executors.newFixedthreadPoolExecutor(5); 
List<Callable> tasks = getTasks(15); // create 15 tasks which takes 2 second each. 
service.invokeAll(tasks, 500, TimUnit.MILLISECONDS); 
// let's move on. 

ответ

1

В соответствии с Java Doc для ExecutorService метода invokeAll():

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html

<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, 
         long timeout, 
         TimeUnit unit) 
         throws InterruptedException 

выполняет поставленные задачи, возвращая список фьючерсов, затаив статус и результаты, когда все полные или тайм-аут истекает , в зависимости от того, что произойдет раньше. Future.isDone() верно для каждого элемента возвращаемого списка. По возвращении задачи, которые не были выполнены, отменены. Обратите внимание, что завершенная задача могла завершиться либо нормально, либо путем исключения исключения. Результаты этого метода не определены, если данный сборник изменен во время выполнения этой операции.

+0

Это то, что неясно «отменено»; означает ли это, что «оставшиеся задачи не будут выполнены» или это означает «Мы отправим отмену задач - через механизм прерывания», – karephul

 Смежные вопросы

  • Нет связанных вопросов^_^