超时后执行器服务的剩余任务



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

根据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返回后,尚未完成的任务将被取消请注意,已完成的任务可能已正常终止,也可能会引发异常。如果在执行此操作时修改了给定的集合,则此方法的结果是未定义的。

相关内容

  • 没有找到相关文章

最新更新