发生超时时,我知道当前在这五个线程上运行的可调用任务将被中断。剩下的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.
答案 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。 返回时,未完成的任务将被取消。 请注意,已完成的任务可能已正常终止或通过抛出异常终止。如果在此操作正在进行时修改了给定集合,则此方法的结果未定义。