并发 · 单选题 · 第 18 题
Java 后端开发面试 · 第 18 题
ThreadPoolExecutor 中,核心线程都在忙时又提交了新任务,处理顺序是?
- A先创建非核心线程,直到达到最大线程数;之后才把任务放进工作队列里排队等待
- B直接执行拒绝策略,因为核心线程忙时线程池不会再接收任何新提交的任务
- C让提交任务的线程阻塞等待,直到某个核心线程空闲下来再把任务交给它执行
- D先放进工作队列;队列满了再创建非核心线程;线程数到达上限后执行拒绝策略
答案
D D. 先放进工作队列;队列满了再创建非核心线程;线程数到达上限后执行拒绝策略
解析
顺序是:核心线程 → 队列 → 非核心线程 → 拒绝策略。所以如果用无界队列(Executors.newFixedThreadPool 默认的 LinkedBlockingQueue),最大线程数形同虚设,任务堆积还可能导致 OOM。Tomcat 的线程池改写了这个顺序,先扩线程再入队,更适合 IO 密集型请求。