Java CompletionService 如何管理多个任务提交?

问题描述

我需要知道当您提交比当前池大小更多的任务时 Java 是如何处理的。我有以下代码

Executor executor = Executors.newFixedThreadPool(2); //2 threads
CompletionService<MyCallable> serv = new ExecutorCompletionService<MyCallable>(executor);
for (int i=0; i<500; i++){
         serv.submit(new MyCallable(i));
}

如果 submit 是阻塞调用,是否有任何线索?或者如果线程都忙,它会拒绝任务吗?

谢谢大家。

解决方法

它维护一个任务队列,一旦任务被加入队列submit就会返回。它不会等待线程开始执行任务。