Skip to content

线程池 → Spring 异步 → MQ 消费者 追问链

追问路径

Q: 线程池核心参数怎么配?
→ 核心/最大/队列/拒绝策略
  Q: Spring @Async用的什么线程池?
  → 默认SimpleAsyncTaskExecutor(每次new线程!要自定义)
    Q: MQ消费者的并发是怎么控制的?
    → concurrency配置本质也是线程池
      Q: 消费慢导致消息积压怎么办?
      → 扩消费者+临时增大线程池+降级非核心

涉及知识点

核心串联逻辑

  1. 线程池本质:复用线程 + 控制并发度 + 任务队列缓冲
  2. Spring @Async 陷阱:默认不用池,每次 new Thread,必须自定义 ThreadPoolTaskExecutor
  3. MQ 消费并发:Kafka 由 partition 数决定上限,RocketMQ 由 consumeThreadMin/Max 控制
  4. 积压应急:横向扩容消费者 + 临时调大线程池 + 跳过非核心消息

面试回答串联

"线程池我会根据 IO/CPU 密集型设定核心线程数。Spring @Async 必须自定义 Executor 避免默认的无限创建。MQ 消费者本质也是线程池消费,积压时先扩 partition 和消费者实例,临时调大消费线程数来快速消化。"