在 Java 中创建线程池主要通过 java.util.concurrent 包下的 ExecutorService 接口及其实现类。以下是创建线程池的几种常见方式:


✅ 1. 使用 Executors 工具类(最简单)

ExecutorService executor = Executors.newFixedThreadPool(10);

常用方法说明:

方法描述
Executors.newFixedThreadPool(int nThreads)固定大小线程池,适合负载稳定场景
Executors.newSingleThreadExecutor()单线程池,串行执行任务
Executors.newCachedThreadPool()缓存线程池,线程可复用,适合执行大量短期异步任务
Executors.newScheduledThreadPool(int corePoolSize)支持定时与周期性任务调度的线程池

⚠️ 缺点Executors 默认线程池队列大小是无界的,可能导致 OOM,不推荐在生产中直接使用。


✅ 2. 使用 ThreadPoolExecutor 构造函数(推荐)

ExecutorService executor = new ThreadPoolExecutor(
    4,                      // corePoolSize
    10,                     // maximumPoolSize
    60,                     // keepAliveTime
    TimeUnit.SECONDS,       // keepAliveTime 单位
    new LinkedBlockingQueue<>(100),  // 工作队列
    Executors.defaultThreadFactory(), // 线程工厂
    new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);

参数详解:

  • corePoolSize:核心线程数
  • maximumPoolSize:最大线程数
  • keepAliveTime:非核心线程最大空闲时间
  • workQueue:任务队列(如 LinkedBlockingQueueArrayBlockingQueue
  • threadFactory:自定义线程工厂
  • handler:任务拒绝策略(如下所示)

常见拒绝策略:

策略类描述
AbortPolicy默认策略,抛出异常
CallerRunsPolicy谁提交谁执行
DiscardPolicy直接丢弃任务
DiscardOldestPolicy丢弃队列头部任务,尝试再次执行当前任务

✅ 3. 使用 ScheduledExecutorService(定时/周期任务)

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);

scheduler.schedule(() -> {
    System.out.println("延迟3秒执行");
}, 3, TimeUnit.SECONDS);

scheduler.scheduleAtFixedRate(() -> {
    System.out.println("每5秒执行一次");
}, 1, 5, TimeUnit.SECONDS);

✅ 4. 使用 Spring 提供的 ThreadPoolTaskExecutor(在 Spring Boot 中)

@Configuration
public class ThreadPoolConfig {

    @Bean
    public ThreadPoolTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(50);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix(\"MyExecutor-\");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }
}

🔚 总结推荐

需求推荐方式
简单临时使用Executors.newFixedThreadPool
可控、适合生产自定义 ThreadPoolExecutor
定时任务调度ScheduledExecutorService
Spring 项目中ThreadPoolTaskExecutor

如果你希望我为你封装一份线程池模板代码(带监控、日志、自定义命名、注释),也可以告诉我,我来写。