newFixedThreadPool
是 Java 中 ExecutorService
接口的一個實現,它創建了一個固定大小的線程池。要配置 newFixedThreadPool
,你需要設置以下參數:
核心線程數(corePoolSize):這是線程池中始終保持活躍的線程數量。即使這些線程處于空閑狀態,也不會被終止。如果任務數量超過了核心線程數,那么將會創建新的工作線程來處理任務。
最大線程數(maximumPoolSize):這是線程池中允許的最大線程數量。當任務數量超過了核心線程數,并且所有核心線程都在忙碌時,線程池會創建新的工作線程,直到達到最大線程數。
任務隊列(workQueue):這是一個用于存儲等待執行的任務的隊列。當線程池中的線程完成任務后,新提交的任務會被添加到任務隊列中。如果任務隊列已滿,且線程池中的線程都在忙碌,那么線程池會根據拒絕策略(RejectedExecutionHandler)處理無法執行的任務。
線程工廠(ThreadFactory):這是一個用于創建新線程的工廠。你可以使用自定義的線程工廠來設置線程的名稱、優先級等屬性。
拒絕策略(RejectedExecutionHandler):當任務隊列已滿,且線程池中的線程都在忙碌時,線程池會根據拒絕策略處理無法執行的任務。Java 提供了四種內置的拒絕策略:
RejectedExecutionException
異常。下面是一個使用 newFixedThreadPool
的示例:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
int corePoolSize = 5;
int maximumPoolSize = 10;
long keepAliveTime = 60L;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(20);
ThreadFactory threadFactory = Executors.defaultThreadFactory();
RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.CallerRunsPolicy();
ExecutorService executorService = Executors.newFixedThreadPool(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, rejectedExecutionHandler);
// 提交任務到線程池
for (int i = 0; i < 30; i++) {
executorService.submit(() -> {
System.out.println("Task executed by thread: " + Thread.currentThread().getName());
});
}
// 關閉線程池
executorService.shutdown();
}
}
在這個示例中,我們創建了一個固定大小為 5 的線程池,最大線程數為 10,空閑線程在 60 秒后會被終止。任務隊列的容量為 20,使用默認的線程工廠和調用者運行策略作為拒絕策略。