线程池面试题一般会怎么问?线程池面试题总结及答案整理

线程池面试题一般会怎么问?线程池面试题总结及答案整理对于广大程序员来说,线程池一定不会陌生,因为大部分程序员面试时总会被问到关于线程池的问题,今天总结了一些关于线程池的各种面试可能问到的题目,希望对大家有所帮助。一、线程池是什么?答:线程池,是一种多线程处理形式,在处理过程中将任务添加到队列中,然后在创建线程后自动启动这些任务。比如把线程池看成一个容器,集中管理线程。线程使用完不会销毁,会先储存在线程池中。二、线程池有几种?答:常见的线程池有四种。newCachedThreadPool创建一个可缓存的线程池,如果线程池长度超过处理需要,

大家好,又见面了,我是你们的朋友全栈君。

对于广大程序员来说,线程池一定不会陌生,因为大部分程序员面试时总会被问到关于线程池的问题,今天总结了一些关于线程池的各种面试可能问到的题目,希望对大家有所帮助。

一、线程池是什么?

答:线程池,是一种多线程处理形式,在处理过程中将任务添加到队列中,然后在创建线程后自动启动这些任务。比如把线程池看成一个容器,集中管理线程。线程使用完不会销毁,会先储存在线程池中。

二、线程池有几种?

答:常见的线程池有四种。

  1. newCachedThreadPool 创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
  2. newFixedThreadPool 创建一个定长线程池,可控制最大并发数,超出的线程将在队列中等待。
  3. newScheduledThreadPool 创建一个定时线程池,支持定时及周期性的执行任务。
  4. newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有的任务按照指定顺序执行(FIFO,LIFO)。

三、线程池都有什么用?

线程池的作用就是限制系统中执行线程的数量。

线程池是一种多线程处理形式,处理过程中将任务添加队列,然后在创建线程后自动启动这些任务,每个线程都使用默认的堆栈大小,以默认的优先级运行,并处在多线程单元中,如果某个线程在托管代码中空闲,则线程池将插入另一个辅助线程来使所有处理器保持繁忙。

如果所有线程池都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后辅助线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才能启动。总之就是低消耗,响应速度快,可管理性高。

四、线程池中的几种重要的参数

  1. corePoolSize就是线程池中的核心线程数量,这几个核心线程,只是在没有用的时候,也不会被回收。
  2. maximumPoolSize就是线程池中可以容纳的最大线程的数量。
  3. keepAliveTime,就是线程池中除了核心线程之外的其他的最长可以保留的时间,因为在线程池中,除了核心线程即使在无任务的情况下也不能被清除,其余的都是有存活时间的,意思就是非核心线程可以保留的最长的空闲时间,util,就是计算这个时间的一个单位。
  4. workQueue,就是等待队列,任务可以储存在任务队列中等待被执行,执行的是FIFIO原则(先进先出)。
  5. threadFactory,就是创建线程的线程工厂。
  6. handler,是一种拒绝策略,我们可以在任务满了之后,拒绝执行某些任务。

五、说说线程池的拒绝策略

当请求任务不断的过来,而系统此时又处理不过来的时候,我们需要采取的策略是拒绝服务。RejectedExecutionHandler接口提供了拒绝任务处理的自定义方法的机会。在ThreadPoolExecutor中已经包含四种处理策略。

  1. AbortPolicy策略:该策略会直接抛出异常,阻止系统正常工作。
  2. CallerRunsPolicy 策略:只要线程池未关闭,该策略直接在调用者线程中,运行当前的被丢弃的任务。
  3. DiscardOleddestPolicy策略: 该策略将丢弃最老的一个请求,也就是即将被执行的任务,并尝试再次提交当前任务。
  4. DiscardPolicy策略:该策略默默的丢弃无法处理的任务,不予任何处理。

除了JDK默认提供的四种拒绝策略,我们可以根据自己的业务需求去自定义拒绝策略,自定义的方式很简单,直接实现RejectedExecutionHandler接口即可。

六、初始化线程池时线程数的选择

如果任务是IO密集型,一般线程数需要设置2倍CPU数以上,以此来尽量利用CPU资源。

如果任务是CPU密集型,一般线程数量只需要设置CPU数加1即可,更多的线程数也只能增加上下文切换,不能增加CPU利用率。

上述只是一个基本思想,如果真的需要精确的控制,还是需要上线以后观察线程池中线程数量跟队列的情况来定。

七、线程池都有哪几种工作队列

  1. ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
  2. LinkedBlockingQueue一个基于链表结构的无界阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列。
  3. SynchronousQueue一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
  4. PriorityBlockingQueue一个具有优先级的无限阻塞队列。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137424.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • QQ空间缓存图片_QQ空间原图

    QQ空间缓存图片_QQ空间原图不知各位遇到特别长的图片时是怎么处理的?是截取符合长宽的部分做临时展示?还是硬要长宽100%模糊(啥也看不清)展示?还是先拿一个压缩的图片做占位,在鼠标移入或点击时放大预览?今天偶然打开PC端QQ空间时,我发现了一种似乎更好的方式——鼠标移入时在范围内上下滚动图片预览,移出时停止滚动。直到用户点击图片跳转到详情展示:分析这种方式着实让我“眼前一亮”,一定程度上带给了用户新奇的体验感。顺着思路,一键f12打开源码,我看到了这样的代码:显而易见,QQ应该是采用了js监听鼠标位

  • 通过网银在线进行在线支付[通俗易懂]

    通过网银在线进行在线支付[通俗易懂]总结一下在我们一个项目中使用的通过网银在线进行在线支付的步骤:下面我用一个asp.net的例子做一下说明:一共建立2个页面Send.aspx(发送交易数据给网银在线)和Receive.as

  • Oracle下查看索引的语句

    Oracle下查看索引的语句1.查询一张表里面索引select*fromuser_indexeswheretable_name=upper(‘表名’);2.查询被索引字段select*fromuser_ind_columnswhereindex_name=(‘索引名称’);3.给某一字段创建索引createindex索引名on表名(字段);…

  • 数据结构导论 — (自考)「建议收藏」

    数据结构导论 — (自考)「建议收藏」自考学习时期又来了,首先学习的第一本自考科目是“数据结构导论”,刚拿到这本书的时候一头雾水,还不明白这本书讲解的是什么,通过三遍读书法(第一遍)的学习,对“数据结构导论”有了一定的认识,并且总结了下来。一.什么是数据结构导论首先要知道,我们在学习计算机解决问题过程中,离不开数据表示和数据处理,而数据表示的核心问题就—数据结构实现。跟设计模式一个道理,数据结构导论它…

  • Node.js aitaotu图片批量下载Node.js爬虫1.00版[通俗易懂]

    Node.js aitaotu图片批量下载Node.js爬虫1.00版[通俗易懂]即使是https网页,解析的方式也不是一致的,需要多试试。代码://======================================================//aitaotu图片批量下载Node.js爬虫1.00//2017年11月14日//======================================…

  • 惠普笔记本拆机详细步骤

    惠普笔记本拆机详细步骤第一次拆电脑,拆着玩玩,非也,拆机原因一:本人笔记本两个小喇叭,结果一个正常声,一个破音了,不管把声音调大还是调小,这破音的效果依然不减,把声音出孔堵住听着舒服点…..拆机原因二:发热特别严重,编

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号