Java 執行緒池之FixedThreadPool(Java程式碼實戰-003)
阿新 • • 發佈:2020-11-16
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; /** * FixThreadPoolExecutorTest 定義一個可重用的固執行緒數的執行緒池 */ public class FixThreadPoolExecutorTest { public static void main(String[] args) { /* * 把處理請求任務的執行緒數設定為固定的10, corePoolSize = maxPoolSize = 10 * keepAliveTime設定為0L,表示空閒的執行緒會立刻終止 * workQueue則是使用LinkedBlockingQueue,但是沒有設定範圍,那麼則是最大值(Integer.MAX_VALUE) * 這基本就相當於一個無界隊列了。 使用該“無界佇列”則會帶來哪些影響呢?當執行緒池中的執行緒數量等於corePoolSize * 時,如果繼續提交任務,該任務會被新增到阻塞佇列workQueue中,當阻塞佇列也滿了之後,則執行緒池會新建執行緒執行任務直到maximumPoolSize。 * 由於FixedThreadPool使用的是“無界佇列”LinkedBlockingQueue,那麼maximumPoolSize引數無效, * 同時指定的拒絕策略AbortPolicy也將無效。而且該執行緒池也不會拒絕提交的任務,如果客戶端提交任務的速度快於任務的執行, * 那麼keepAliveTime也是一個無效引數。*/ ExecutorService pool = Executors.newFixedThreadPool(10); // 始終只有10個執行緒來處理請求任務,來不及處理的任務會放置於阻塞佇列中 for (int i = 0; i < 50; i++) { pool.submit(new Runnable() { @Override public void run() { System.out.println("hello world! Execute ThreadName=" + Thread.currentThread().getName()); } }); } } }