Java Executor服务线程池

时间:2011-09-01 17:52:49

标签: java multithreading threadpool executorservice

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

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

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

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

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

1 个答案:

答案 0 :(得分:23)

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

  

创建一个线程池,该线程池重用在共享无界队列中运行的固定数量的线程。在任何时候,最多nThreads线程将是活动的处理任务。 如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到线程可用。如果任何线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程。池中的线程将一直存在,直到明确关闭为止。

Javadocs代码与Java Concurrency Framework一样成熟,包含大量知识。让他们靠近。