Java Executor服务线程池



如果我在java中使用Executor框架创建一个固定大小的10个线程池:

private final ExecutorService pool;
pool = Executors.newFixedThreadPool(10);

,然后尝试提交10个以上的任务(例如,12个任务);

for (int i = 0 ; i < 12 ; i++) {
    pool.execute(new Handler(myRunnable));
}

额外的任务(根据12个任务的例子额外的两个任务)会发生什么?它们会被阻塞直到线程完成它的工作吗?

引用Executors.newFixedThreadPool(int nThreads)的Javadoc (强调mine):

创建一个线程池,该线程池重用在共享无界队列上操作的固定数量的线程。在任何时候,最多有nThreads线程处于活动状态,正在处理任务。如果在所有线程都处于活动状态时提交了额外的任务,它们将在队列中等待,直到一个线程可用。如果任何线程在关闭之前的执行过程中由于失败而终止,如果需要执行后续任务,则会有一个新线程取代它的位置。在显式关闭池之前,池中的线程将一直存在。

与Java并发框架一样成熟的代码javadoc包含了大量的知识。

最新更新