Java中Executors工厂类提供五种线程池:固定大小(newFixedThreadPool)适合稳定并发任务但需防OOM;可缓存(newCachedThreadPool)适用于突发短任务但线程数不可控;单线程(newSingleThreadExecutor)保障串行执行且自动恢复;定时调度(newScheduledThreadPool)支持延迟和周期任务,但不支持动态扩容。

Java 中使用 Executors 工厂类创建线程池,核心就是调用它的静态方法——一行代码就能拿到一个功能明确、开箱即用的线程池实例。它适合开发初期快速验证、工具脚本或非关键业务场景,但要注意:生产环境建议用 ThreadPoolExecutor 手动配置,避免默认参数带来的隐患(比如无界队列导致内存溢出)。
固定大小线程池(newFixedThreadPool)
适用于任务量稳定、需要控制并发上限的场景,比如处理 HTTP 请求、数据库批量操作。
- 创建方式:
ExecutorService pool = Executors.newFixedThreadPool(4); - 特点:线程数固定为 4,所有线程长期存活;新任务提交时,若有空闲线程立即执行,否则进入无界队列等待
- 注意:队列无界,若任务持续涌入且处理慢,可能引发 OOM
可缓存线程池(newCachedThreadPool)
适合大量短生命周期、突发性任务,例如日志异步写入、轻量计算任务。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 创建方式:
ExecutorService pool = Executors.newCachedThreadPool(); - 特点:核心线程数为 0,最大线程数为
Integer.MAX_VALUE;空闲线程 60 秒后自动回收;新任务总是优先复用空闲线程,没有则新建 - 注意:线程数不受控,高并发下可能创建过多线程,耗尽系统资源
单线程线程池(newSingleThreadExecutor)
不是为了并发,而是为了「串行 + 异步 + 可管理」,比如顺序更新状态、串行写文件、轻量事务补偿。
立即学习“Java免费学习笔记(深入)”;
- 创建方式:
ExecutorService pool = Executors.newSingleThreadExecutor(); - 特点:仅 1 个线程;任务按提交顺序 FIFO 执行;线程异常终止后会自动重建;内部使用无界队列
- 优势:比手动
new Thread().start()更可靠,支持优雅关闭(shutdown())、监控和拒绝策略
定时/周期性线程池(newScheduledThreadPool)
专门用于延迟执行或周期调度,比如心跳上报、定时清理缓存、轮询检查。
- 创建方式:
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2); - 常用调度方法:
-
schedule(Runnable, delay, TimeUnit):延迟一次执行 -
scheduleAtFixedRate(..., initialDelay, period, ...):固定频率(从首次开始计时) -
scheduleWithFixedDelay(..., initialDelay, delay, ...):固定延时(上一次结束后再等 delay)
-
- 注意:线程数固定,不支持动态扩容;若任务执行时间 > 周期,会“堆积”而非并行执行

















