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,使用默认的线程工厂和调用者运行策略作为拒绝策略。