线程池 WorkQueue 作用 & 必背面试题
3 分钟速记,背完直接拿分!
📚 一句话记忆
WorkQueue 是线程池的「任务缓冲带」
- 缓冲:避免瞬间创建大量线程
- 解耦:生产者线程 与 工作线程 解耦
- 排队:任务 > 核心线程数时,先排队,再扩容,最后拒绝
📚 面试 6 连问 & 标准答
面试官提问 | 一句话答案 |
---|---|
1. WorkQueue 在线程池中的作用? | 缓冲任务、解耦生产/消费、控制并发。 |
2. 线程池有哪 4 种内置队列? | LinkedBlockingQueue (无界/可指定)、ArrayBlockingQueue (有界)、SynchronousQueue (零容量)、DelayedWorkQueue (延迟队列)。 |
3. 无界队列会导致什么问题? | 高并发时任务无限堆积,OOM。 |
4. 队列满了会发生什么? | 如果线程数 < maxPoolSize → 新建线程;否则触发 拒绝策略。 |
5. SynchronousQueue 和 LinkedBlockingQueue 区别? | 前者零容量必须配对消费,后者可缓存大量任务。 |
6. 如何手写一个最小线程池? | 用 BlockingQueue + 循环线程 实现任务复用。 |
🖊️ 手写最小线程池(10 行)
class TinyPool {
private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
public TinyPool(int size) {
for (int i = 0; i < size; i++) {
new Thread(() -> {
while (true) {
try { queue.take().run(); }
catch (InterruptedException ignore) {}
}
}).start();
}
}
public void execute(Runnable task) { queue.offer(task); }
}
📚 记忆口诀
“无界保吞吐,有界控内存,零容量保实时,拒绝策略兜底。”
背完即可应对 95% 线程池面试题!