线程池面试题目集合

最近面试中总是问到ThreadPoolExecutor类相关问题,在此集中整理下。

问题1.ThreadPoolExecutor的关键参数是哪些,任务添加过程中,内部线程是怎样构建的?

a)任务到达时,线程池数目小于核心线程数corePoolSize,则创建新的线程运行任务。

b)任务到达时,线程池数据大于等于核心线程数corePoolSize,则把任务放入blockingQueue中。

c)任务到达时,当blockingQueue已经放满时,同时线程池数目小于maximumPoolSize,则新建线程处理新到达的任务。

d)任务到达时,blockingQueue已经放满,同时线程池数目等于maximumPoolSize,则交给RejectHandler处理。

问题2:使用的等待队列容量有限制吗?

当你回答没有限制的时候,接着问题就来了,这样会有什么问题?那就是队列原来越长,最终容易OOM。

当你回答有限制的时候,接着的问题就是:那么当队列满的时候,按照blockingQueue的策略,不是应该block住吗?怎么会到达步骤c)呢?

注意:这里是一个陷阱。从源代码中可以,这里从blockingQueue中放入任务是使用的offer方法,非阻塞调用。

问题3:使用线程池时,怎样设置这些参数?

详细细节参考文章:
24张图带你彻底弄懂 Java 线程池 | 二哥的Java进阶之路

相关推荐
@蓝莓果粒茶8 小时前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#
小悟空9 小时前
[AI 生成] Flink 面试题
大数据·面试·flink
YuTaoShao9 小时前
【LeetCode 热题 100】51. N 皇后——回溯
java·算法·leetcode·职场和发展
Sherry00711 小时前
CSS Grid 交互式指南(译)(下)
css·面试
一只毛驴11 小时前
浏览器中的事件冒泡,事件捕获,事件委托
前端·面试
一只叫煤球的猫11 小时前
你真的处理好 null 了吗?——11种常见但容易被忽视的空值处理方式
java·后端·面试
KarrySmile11 小时前
Day04–链表–24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个结点,面试题 02.07. 链表相交,142. 环形链表 II
算法·链表·面试·双指针法·虚拟头结点·环形链表
测试199811 小时前
cmake应用:集成gtest进行单元测试
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
一只毛驴12 小时前
谈谈浏览器的DOM事件-从0级到2级
前端·面试
在未来等你12 小时前
RabbitMQ面试精讲 Day 5:Virtual Host与权限控制
中间件·面试·消息队列·rabbitmq