星海

并发 · 单选题 · 第 18 题

Java 后端开发面试 · 第 18 题

ThreadPoolExecutor 中,核心线程都在忙时又提交了新任务,处理顺序是?

  1. A先创建非核心线程,直到达到最大线程数;之后才把任务放进工作队列里排队等待
  2. B直接执行拒绝策略,因为核心线程忙时线程池不会再接收任何新提交的任务
  3. C让提交任务的线程阻塞等待,直到某个核心线程空闲下来再把任务交给它执行
  4. D先放进工作队列;队列满了再创建非核心线程;线程数到达上限后执行拒绝策略

答案

D D. 先放进工作队列;队列满了再创建非核心线程;线程数到达上限后执行拒绝策略

解析

顺序是:核心线程 → 队列 → 非核心线程 → 拒绝策略。所以如果用无界队列(Executors.newFixedThreadPool 默认的 LinkedBlockingQueue),最大线程数形同虚设,任务堆积还可能导致 OOM。Tomcat 的线程池改写了这个顺序,先扩线程再入队,更适合 IO 密集型请求。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。