外观
Executors.newFixedThreadPool(5) 在 Android 中可能带来什么风险?
标准回答
固定线程数不等于固定内存占用。newFixedThreadPool 常见的无界任务队列仍可能越积越多。
- 生产速度超过消费速度时,等待任务会持续积累。
- 任务可持有 Activity、大数组等对象,导致延迟与内存增长。
- 可使用显式 ThreadPoolExecutor + 有界队列并设计拒绝策略。
通俗例子
5 个线程每秒处理 10 项任务,上游每秒提交 1000 项,线程没增加,但等待队列会迅速膨胀。
深入解释
**固定的是什么:**newFixedThreadPool 固定工作线程数量,但常见实现使用无界队列。五条线程并不代表最多只有五个任务驻留,后面可能还排着几万个任务。
**真正的风险是什么:**任务抓住大对象或页面时,积压会增加内存并延长数据过期时间。需要有界队列、明确拒绝策略,或者在业务入口限制重复提交。
易混淆点
“只有 5 个线程,所以内存安全”忽略了队列里尚未执行的任务。
内容来源
- Android · AI Agent 知识手册 · 原条目
4.4.3