fixedthreadpool 使用固定数量核心线程和无界队列,线程不销毁、不扩容,任务全入队等待;默认拒绝策略为abortpolicy,内存积压可能导致oom。

FixedThreadPool 通过一个固定数量的核心线程 + 无界任务队列来管理任务,不创建新线程,也不拒绝任务(除非手动设置拒绝策略)。
线程数量恒定,复用已有线程
FixedThreadPool 内部维护指定数量的“核心线程”,这些线程在空闲时不会被销毁(默认 keepAliveTime=0,即不超时终止),始终存活。所有提交的任务都由这组线程轮流执行,不存在线程动态增减。
- 比如
Executors.newFixedThreadPool(3)就只会有最多 3 个活跃线程 - 即使有 100 个任务排队,也仍是这 3 个线程依次处理
- 线程执行完一个任务后,立即从队列中取下一个,持续循环
任务全部进入 LinkedBlockingQueue 等待
FixedThreadPool 默认使用无界阻塞队列(LinkedBlockingQueue,容量为 Integer.MAX_VALUE),所有未被立即执行的任务都会被缓存到该队列中,等待线程空闲后拉取。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 队列不会满(除非内存耗尽),所以
submit()或execute()几乎总能成功返回 - 但要注意:大量堆积任务会持续占用堆内存,可能引发 OOM
- 若需控制积压上限,应手动传入有界队列并配置拒绝策略
不创建新线程,也不回收核心线程
FixedThreadPool 的 “fixed” 就体现在线程生命周期上:它没有最大线程数概念,也不会因负载升高而扩容;只要线程池没 shutdown,核心线程就一直存在。
- 调用
shutdown()后,线程会处理完队列中剩余任务再终止 - 调用
shutdownNow()会尝试中断正在运行的线程,并清空队列返回未执行任务列表 - 即使长时间空闲,线程也不会自动退出(区别于 CachedThreadPool)
拒绝策略默认是 AbortPolicy
虽然队列无界,但如果显式替换成有界队列(如 ArrayBlockingQueue(10)),当队列满且所有线程都在忙时,就会触发拒绝策略。FixedThreadPool 默认使用 AbortPolicy —— 直接抛出 RejectedExecutionException。
- 其他常见策略:
CallerRunsPolicy(由提交线程自己执行)、DiscardPolicy(静默丢弃)、DiscardOldestPolicy(丢弃队首任务) - 自定义线程池时可通过
new ThreadPoolExecutor(...)显式指定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










