今天给大家带来的大厂面试题:
线程池中的阻塞队列有哪几种?
阻塞队列用于保存等待执行的任务。当任务的数量超过 corePoolSize 数量,后续的任务将会进入阻塞队列,阻塞排队。
线程池中用到了以下几种阻塞队列:
是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
一个基于链表结构的阻塞队列,此队列按 FIFO 排序元素,吞吐量通常要高于 ArrayBlockingQueue。静态工厂方法 Executors.newFixedThreadPool() 使用了这个队列。(newFixedThreadPool 用于创建固定线程数)
LinkedBlockingQueue 原理
一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于 LinkedBlockingQueue,静态工厂方法 Executors.newCachedThreadPool 使用这个队列。(newCachedThreadPool 用于根据需要创建新线程)
SynchronousQueue 原理
一个具有优先级的无限阻塞队列。
PriorityBlockQueue的原理图
参考:[干货 | 45张图庖丁解牛18种Queue,你知道几种?]
线程池问题汇总:
√ 线程池的原理?07-30
√ 阻塞队列有哪几种?08-01
[ ] 线程池如何使用?
[ ] 拒绝策略有哪几种?
[ ] 如何合理配置线程池参数?
[ ] 线程池如何监控?
[ ] Executor 框架?
[ ] Executor 有哪几种线程池?
嗯,
新的一天,赛亚人开始多倍重力历练了!
加油哇~
·······END·······
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8