2011-09-01 211 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併發框架一樣成熟,包含了大量的知識。保持關閉。