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

目录

问题解答

面试点评


问题解答

当我们提交一个任务线程池的时候,它的工作原理分为四步

    第一步,预热核心线程

    第二,把任务添加到阻塞队列

    第三步,如果添加到阻塞队列失败,则创建非核心线程增加处理效率

    第四步,如果非核心线程数达到了阈值,就触发拒绝策略

所以 ,如果希望这个任务不进入队列 ,那么只需要去影响第二步的执行逻辑就行了。

Java 线程池提供的构造方法里面 ,有一个参数可以修改阻塞队列的类型。

其中,就有一个阻塞队列叫SynchronousQueue(如图),这个队列不能存储任何元

它的特性是,生产一个任务,就必须要指派一个消费者来处理,否则就会阻塞生产者。

基于这个特性 ,只要把线程池的阻塞队列替换成 SynchronousQueue

就能够避免任务进入到阻塞队列 ,而是直接启动最大线程数去处理这个任务。

面试点

这个问题考察的角度其实挺有意思。

它能筛选掉很多靠背面试题去准备面试的同学。

但凡你了解过线程池的工作原理以及阅读过源码你都能轻易的回答出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值