From 76bdffbdb04f06fa0ab34da08c7857f7acc7533e Mon Sep 17 00:00:00 2001 From: loulanyue <260355617@qq.com> Date: Tue, 9 Jun 2026 11:11:48 +0800 Subject: [PATCH] docs: add thread pool interview notes --- ...32\346\233\264\345\245\275\345\223\246.md" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git "a/02-java/concurrency/\346\211\213\345\212\250\345\210\233\345\273\272\347\272\277\347\250\213\346\261\240,\346\225\210\346\236\234\344\274\232\346\233\264\345\245\275\345\223\246.md" "b/02-java/concurrency/\346\211\213\345\212\250\345\210\233\345\273\272\347\272\277\347\250\213\346\261\240,\346\225\210\346\236\234\344\274\232\346\233\264\345\245\275\345\223\246.md" index a76e7802..c9eb8404 100644 --- "a/02-java/concurrency/\346\211\213\345\212\250\345\210\233\345\273\272\347\272\277\347\250\213\346\261\240,\346\225\210\346\236\234\344\274\232\346\233\264\345\245\275\345\223\246.md" +++ "b/02-java/concurrency/\346\211\213\345\212\250\345\210\233\345\273\272\347\272\277\347\250\213\346\261\240,\346\225\210\346\236\234\344\274\232\346\233\264\345\245\275\345\223\246.md" @@ -8,6 +8,30 @@ private ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-runner-%d").build(); private ExecutorService taskExe = new ThreadPoolExecutor(10,20,200L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue(),namedThreadFactory); +## 面试补充:线程池生产配置要点 + +线程池题建议从“参数含义、任务类型、队列选择、拒绝策略、监控治理”五个角度回答。 + +### 为什么不推荐 Executors 快捷方法 + +`Executors.newFixedThreadPool` 默认使用无界队列,流量高峰时任务可能无限堆积,最终导致内存膨胀和接口延迟失控。`newCachedThreadPool` 最大线程数接近无界,可能在下游变慢时创建大量线程,进一步放大故障。 + +### 核心参数怎么解释 + +`corePoolSize` 表示常驻工作线程数,`maximumPoolSize` 表示队列满后允许扩张的最大线程数,`workQueue` 决定任务排队能力,`keepAliveTime` 决定非核心线程回收时间,`RejectedExecutionHandler` 决定系统过载时如何反馈压力。 + +### 有界队列的价值 + +生产环境更推荐有界队列,因为它能把过载显式暴露出来。队列太大虽然短时间不报错,但会把延迟藏起来;当任务已经堆积很多时,即使系统恢复,新请求仍然会排在旧任务后面,用户看到的就是长时间超时。 + +### 拒绝策略怎么选 + +核心链路通常选择快速失败或调用方降级,避免无意义排队。后台任务可以记录日志后丢弃或进入补偿队列。`CallerRunsPolicy` 能反向压慢提交方,但要确认调用线程能承受同步执行任务,否则也可能拖慢主流程。 + +### 必须监控的指标 + +线程池上线后要监控活跃线程数、队列长度、任务执行耗时、拒绝次数、异常数量和任务堆积时间。线程池不是配置完就结束,真正的稳定性来自容量评估、压测校验和持续观测。 + ---