2011-09-01 167 views
4

如果我创建在Java中10个线程使用的Executor框架固定大小的线程池:的Java执行器服务线程池

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

,然后尝试提交超过10个任务(说为例,12个任务) ;

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

会发生什么额外的任务(额外的两个任务为每12个任务的例子)?他们会被阻止,直到线程完成其工作?

+2

正如@Sahil指出的,在[javadoc]中是正确的(http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool%28int%29) ! – mre

+2

你试过了吗? –

+1

你可以通过阅读Javadoc自己回答这个问题。 –

回答

22

引述为Executors.newFixedThreadPool(int nThreads)的Javadoc(重点矿山):

创建一个可重用不受限制的队列操作线程的固定数目的线程池。在任何时候,最多nThreads线程都将被激活处理任务。 如果在所有线程处于活动状态时提交其他任务,则它们将在队列中等待,直到线程可用。如果任何线程在关闭之前的执行期间由于失败而终止,则如果需要执行后续任务,则将取代它。池中的线程将一直存在,直到它被明确关闭。

Javadocs代码与Java并发框架一样成熟,包含了大量的知识。保持关闭。