线程池面试题目集合
最近面试中总是问到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进阶之路
原文地址:https://blog.csdn.net/adorechen/article/details/145148096
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!