Skip to content
阅读进度

如何理解线程池排队与容量限制? ​

返回 Java 与并发 目录

标准回答 ​

ThreadPoolExecutor通常先在核心线程数范围内创建工作线程,达到后尝试入队,队列无法接受时再尝试扩到最大线程数,仍无法处理则执行拒绝策略。使用无界队列时,最大线程数往往不会按想象发挥扩容作用。

无界排队可能造成内存上涨和越来越长的请求等待。有界队列则要求明确过载策略:拒绝、降级、合并重复任务或上游减速。核心UI请求与长时间后台任务不宜无区别混用。

对Android特别注意CallerRunsPolicy:如果提交者是主线程,队列满时它可能在主线程执行重任务,直接造成卡顿。拒绝不等于静默丢任务,应把失败反馈给业务。

追问与回答 ​

为什么任务数不多也会等很久 ​

少量长任务或阻塞I/O占住线程,后面的短关键任务也会排队。记录任务排队时长并考虑任务隔离。

参考资料 ​

内容来源 ​

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