超时后Executor Service的剩余任务

时间:2014-09-08 17:24:37

标签: java multithreading executorservice

发生超时时,我知道当前在这五个线程上运行的可调用任务将被中断。剩下的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 个答案:

答案 0 :(得分:1)

根据ExecutorService方法invokeAll()的Java文档:

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

执行给定的任务,返回一个Futures列表,在完成或超时到期时保持其状态和结果,以先发生者为准。对于返回列表的每个元素,Future.isDone()都为true。 返回时,未完成的任务将被取消。 请注意,已完成的任务可能已正常终止或通过抛出异常终止。如果在此操作正在进行时修改了给定集合,则此方法的结果未定义。