Java 线程池面试怎么答
线程池不是「开很多线程就快」。先说 ThreadPoolExecutor 七个参数里你真正调过的:核心数、最大数、队列、拒绝策略。再解释任务是 IO 密集还是 CPU 密集,为什么核心数不是越大越好。
口头顺序
- 任务从 execute/submit 进来,先核心线程、再排队、再扩到最大、再拒绝
- 队列用无界链表时,最大线程可能永远用不上,堆积会拖垮内存
- 拒绝策略要能说到 Abort、CallerRuns,以及你们线上选了哪一种
- 关闭时 shutdown 与 shutdownNow 的差别:等剩余任务还是打断
和其它并发工具怎么分工
- CountDownLatch:等一组任务到齐再往下,适合一次性汇合
- Semaphore:限流并发许可,适合连第三方
- CompletableFuture:组合异步结果,注意默认线程池被 IO 占满
- synchronized / ReentrantLock:保护共享状态,不要用线程池替代锁
简历若写过「异步下单」「批量导出」,讲清楚超时、取消和失败重试落在哪一层。编造「万级 QPS 自研调度器」很容易被追问穿。