一、Executors 概述java.util.concurrent.Executors是线程池的工具类提供静态方法快速创建不同类型线程池底层全部是封装了ThreadPoolExecutor的构造器简化代码编写。⚠️阿里巴巴开发手册强制规范生产环境禁止使用 Executors 创建线程池容易引发 OOM 内存溢出仅用于测试、学习场景。 接口ExecutorService代表线程池对象。二、Executors 4 大静态方法1. newFixedThreadPool (int nThreads) 固定线程池// 创建固定数量的核心线程无临时线程 ExecutorService pool Executors.newFixedThreadPool(3);参数线程数量固定底层源码new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueueRunnable());参数解读核心线程数 最大线程数没有临时线程阻塞队列LinkedBlockingQueue默认容量Integer.MAX_VALUE无限队列特点线程数量固定线程不会被回收任务多了会无限往队列放。风险任务大量堆积队列无限长 →OOM 内存溢出2. newSingleThreadExecutor () 单线程池ExecutorService pool Executors.newSingleThreadExecutor();底层核心线程 1最大线程 1无限阻塞队列特点池内永远只有1 个线程任务串行依次执行适合任务需要顺序执行场景。风险同样无限队列任务堆积 OOM。3. newCachedThreadPool () 可缓存线程池ExecutorService pool Executors.newCachedThreadPool();底层源码new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueueRunnable());参数解读0 个核心线程最大线程数为Integer.MAX_VALUE临时线程空闲 60 秒自动销毁队列SynchronousQueue不存储任务来了任务直接创建线程。特点按需创建线程线程空闲 60s 自动回收。风险任务瞬间大量涌入会疯狂新建线程线程数量过多CPU 耗尽OOM。4. newScheduledThreadPool (int corePoolSize) 定时线程池// 支持延迟执行、周期性重复执行任务 ScheduledExecutorService pool Executors.newScheduledThreadPool(2);返回值ScheduledExecutorService继承ExecutorService额外支持定时任务特点可以延迟一段时间执行任务或者每隔一段时间重复执行任务。风险最大线程数Integer.MAX_VALUE大量任务会创建大量线程OOM。三、代码示例演示示例 1newFixedThreadPoolimport java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExecutorsDemo { public static void main(String[] args) { // 创建固定3个线程的线程池 ExecutorService pool Executors.newFixedThreadPool(3); // 提交5个任务 for (int i 1; i 5; i) { pool.submit(() - { System.out.println(Thread.currentThread().getName() 正在执行任务); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); } // 关闭线程池不再接收新任务执行完现有任务再关闭 pool.shutdown(); } }示例 2定时线程池延迟执行import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledPoolDemo { public static void main(String[] args) { ScheduledExecutorService pool Executors.newScheduledThreadPool(2); // 参数任务延迟多久执行时间单位 pool.schedule(() - { System.out.println(延迟3秒执行); },3, TimeUnit.SECONDS); } }四、ExecutorService 线程池常用方法方法作用execute(Runnable task)提交无返回值任务submit(task)提交任务支持 Runnable/Callable返回 Future 对象可以拿到任务返回结果shutdown()平缓关闭线程池不接收新任务等待已经提交的任务执行完毕shutdownNow()立刻尝试关闭中断正在运行任务返回队列里未执行的任务列表isShutdown()判断线程池是否已经关闭五、重点面试总结必背Executors 是什么线程池工具类静态方法快速创建线程池底层封装 ThreadPoolExecutor。为什么生产不推荐 ExecutorsnewFixedThreadPool /newSingleThreadExecutor阻塞队列是无限长大量任务堆积 → OOMnewCachedThreadPool /newScheduledThreadPool最大线程数无限大量任务会创建海量线程 → OOM✅生产推荐手动new ThreadPoolExecutor()自定义 7 个参数限制队列长度、最大线程数。四个线程池简单区分newFixedThreadPool固定数量线程newSingleThreadExecutor单线程串行执行newCachedThreadPool自动按需创建、回收临时线程newScheduledThreadPool延迟 / 周期定时任务六、Executors 和 ThreadPoolExecutor 的关系ThreadPoolExecutor线程池实现类原生构造器7 个参数可控生产推荐Executors工具类只是帮你 new ThreadPoolExecutor帮你填好参数简化代码ExecutorService线程池接口定义线程池的行为方法