Skip to content
阅读进度

Executors.newFixedThreadPool(5) 在 Android 中可能带来什么风险? ​

返回 Java 与并发 目录

标准回答 ​

固定线程数不等于固定内存占用。newFixedThreadPool 常见的无界任务队列仍可能越积越多。

  • 生产速度超过消费速度时,等待任务会持续积累。
  • 任务可持有 Activity、大数组等对象,导致延迟与内存增长。
  • 可使用显式 ThreadPoolExecutor + 有界队列并设计拒绝策略。

通俗例子 ​

5 个线程每秒处理 10 项任务,上游每秒提交 1000 项,线程没增加,但等待队列会迅速膨胀。

深入解释 ​

**固定的是什么:**newFixedThreadPool 固定工作线程数量,但常见实现使用无界队列。五条线程并不代表最多只有五个任务驻留,后面可能还排着几万个任务。

**真正的风险是什么:**任务抓住大对象或页面时,积压会增加内存并延长数据过期时间。需要有界队列、明确拒绝策略,或者在业务入口限制重复提交。

易混淆点 ​

“只有 5 个线程,所以内存安全”忽略了队列里尚未执行的任务。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。