Java线程池推荐手动创建ThreadPoolExecutor而非Executors工厂方法;前者可显式配置corePoolSize、maximumPoolSize等参数,避免无界队列OOM等隐患,后者虽便捷但存在内存风险。
Java线程池主要通过 Executors 工具类 和 ThreadPoolExecutor 手动构造 两种方式创建,前者便捷但有隐患,后者灵活可控,推荐在生产环境优先使用后者。
Executors 类封装了常见线程池的创建逻辑,适合简单场景或学习使用:
显式指定参数可避免默认配置的陷阱,关键参数包括:
ue),防止任务无限堆积以下是一个生产可用的线程池构造片段:
ThreadPoolExecutor executor = new ThreadPoolExecutor(
4, // 核心线程数
8, // 最大线程数
60L, // 非核心线程空闲存活时间
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(100), // 有界任务队列
new ThreadFactoryBuilder()
.setNameFormat("biz-task-pool-%d")
.setDaemon(true)
.build(),
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝时由提交者执行
);
基本上就这些。用好 ThreadPoolExecutor 的七个参数,比背熟几个 newXXX 方法更重要。