如果我在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包含了大量的知识。