当前位置:首页 > 科技  > 软件

美团面试官:核心线程数为0时,线程池如何执行?

来源: 责编: 时间:2024-05-08 09:19:40 100观看
导读线程池是 Java 中用于提升程序执行效率的主要手段,也是并发编程中的核心实现技术,并且它也被广泛的应用在日常项目的开发之中。那问题来了,如果把线程池中的核心线程数设置为 0 时,线程池是如何执行的?要回答这个问题,我们

线程池是 Java 中用于提升程序执行效率的主要手段,也是并发编程中的核心实现技术,并且它也被广泛的应用在日常项目的开发之中。那问题来了,如果把线程池中的核心线程数设置为 0 时,线程池是如何执行的?td328资讯网——每日最新资讯28at.com

要回答这个问题,我们首先要了解在正常情况下,线程池的执行流程,也就是说当有一个任务来了之后,线程池是如何运行的?td328资讯网——每日最新资讯28at.com

1.线程池的执行流程

正常情况下(核心线程数不为 0 的情况下)线程池的执行流程如下:td328资讯网——每日最新资讯28at.com

  1. 判断核心线程数:先判断当前工作线程数是否大于核心线程数,如果结果为 false,则新建线程并执行任务。
  2. 判断任务队列:如果大于核心线程数,则判断任务队列是否已满?如果结果为 false,则把任务添加到任务队列中等待线程执行。
  3. 判断最大线程数:如果任务队列已满,则判断当前线程数量是否超过最大线程数?如果结果为 false,则新建线程执行此任务。
  4. 判断是否要执行拒绝策略:如果超过最大线程数,则将执行线程池的拒绝策略。

如下图所示:td328资讯网——每日最新资讯28at.com

图片图片td328资讯网——每日最新资讯28at.com

核心线程数 VS 最大线程数

核心线程数(corePoolSize)和最大线程数(maximumPoolSize)都是线程池中的两个重要参数,其中:td328资讯网——每日最新资讯28at.com

  1. 核心线程数定义了线程池中最小线程数量,即使这些线程处于空闲状态,也不会被销毁。
  2. 最大线程数定义了线程池中允许的最大线程数量,最大线程数等于核心线程数 + 临时线程数,最大线程数主要是提供了一种机制来应对突发的高并发请求,当有大量任务的时候,可以创建线程数量的上线。

PS:在线程池的使用过程中,最大线程数必须大于等于核心线程数,否则程序执行会报错。td328资讯网——每日最新资讯28at.com

2.核心线程为0的执行流程

那么问题来了,按照线程池的正常执行流程来看,如果核心线程数为 0 的话,那么当任务来了之后会判断当前工作的线程数不大于核心线程数,那也就不会创建线程执行任务了,会将任务放到队列。td328资讯网——每日最新资讯28at.com

但这个结果又很滑稽,有任务来了线程池竟然不执行,而是先放到任务队列中,这好像有比较奇怪,这就好比你开了一个快递店,当有快递来了之后,你想的不是如何派送,而是直接把它丢到仓库一样滑稽,这会让等快递的人很着急,所以,我们需要验证一下线程池的执行是否如我们猜想的那般,验证代码如下:td328资讯网——每日最新资讯28at.com

// 线程池核心线程数设置为 0ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(                0, 10, 1, TimeUnit.SECONDS,                new ArrayBlockingQueue<>(10));// 给线程池添加任务threadPoolExecutor.execute(() -> {    System.out.println("www.javacn.site");});

最终程序的执行结果如下:td328资讯网——每日最新资讯28at.com

图片图片td328资讯网——每日最新资讯28at.com

咦,结果怎么不符合我们的预期呢?为什么任务来了之后,没有将任务放到任务队列而是直接执行了呢?td328资讯网——每日最新资讯28at.com

虽然程序执行结果符合正常逻辑,但又和我们了解的线程池执行理论相违背,这是什么原因呢?td328资讯网——每日最新资讯28at.com

查看线程池的执行源码

带着这个疑问,我们查看了线程池的执行源码发现,线程池的执行过程远比我们想想的复杂,线程池核心源码如下:td328资讯网——每日最新资讯28at.com

图片图片td328资讯网——每日最新资讯28at.com

从上面源码可以看出,当我们将任务添加到队列的时候,线程池会判断工作的线程数是否为 0,也就是上面圈出来的那行代码,如果当前工作线程为 0 的话,会创建线程执行任务。哦,原来如此,这样,就能将理论和实践对应上了。td328资讯网——每日最新资讯28at.com

也就是说,当核心线程数为 0 时,当来了一个任务之后,会先将任务添加到任务队列,同时也会判断当前工作的线程数是否为 0,如果为 0,则会创建线程来执行线程池的任务,这就是正确的线程池执行流程,同时也是面试官想要的答案。td328资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-87259-0.html美团面试官:核心线程数为0时,线程池如何执行?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 十项快速检查,确保你的 AWS 支出处于控制之中

下一篇: 虚拟现实与增强现实:数字转型的下一个前沿

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 2023 年的 Node.js 生态系统

    2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 得物效率前端微应用推进过程与思考

    得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 一篇文章带你了解 CSS 属性选择器

    一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • iQOO Neo8系列新品发布会

    iQOO Neo8系列新品发布会

    旗舰双芯 更强更Pro
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
  • “买真退假” 这种“羊毛”不能薅

    “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
Top
Baidu
map