当前位置: 首页 > 后端技术 > Java

【Java面试】当任务数超过线程池核心线程数时,如何让它不进入队列,而是直接启用最大线程数

时间:2023-04-01 18:40:59 Java

你懂的,《当任务数超过时》线程池的核心线程数,如何让它不进入队列,直接启用最大线程数”?大家好,我是Mic,一名拥有14年经验的Java程序员。刚才这个问题是一位最近工作5年的粉丝去一家互联网公司面试时遇到的。关于这个问题,我把专家们的回答整理成一个15W字的面试文档。可以私信我领取,看下方大师解答。Master当我们向线程池提交任务时,它的工作原理分为四个步骤。第一步是预热核心线程。第二步是将任务添加到阻塞队列中。第三步,如果加入阻塞队列失败,创建一个非核心线程,提高处理效率。第四步是如果非核心线程数达到阈值,那么,如果想让这个任务不进入队列,只需要影响第二步的执行逻辑即可。在Java中线程池提供的构造方法中,有一个参数可以修改阻塞队列的类型。其中,有一个阻塞队列叫做SynchronousQueue,它不能存储任何元素。它的特点是每生产一个任务,都要分配一个消费者来处理,否则生产者会被阻塞。基于这个特点,将线程池的阻塞队列换成SynchronousQueue即可。它可以阻止任务进入阻塞队列,而是直接启动最大数量的线程来处理任务。总结一下这个问题的考察角度其实挺有意思的。可以筛选出很多靠背靠背面试题来准备面试的同学。只要了解线程池的工作原理,阅读源码,就可以轻松解答。大家记得点赞收藏关注哦!!!版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!