并发面试题:当任务数超过了线程池的核心线程数时,如何让它不进入队列?

并发面试题:当任务数超过了线程池的核心线程数时,如何让它不进入队列?
当我们提交一个任务到线程池里面的时候,它的工作原理一共分为四个步骤。

第一步:预热核心线程。
第二步:把任务添加到阻塞队列。
第三步:如果添加到阻塞队列失败,则会创建非核心线程增加处理效率。
第四步:如果非核心线程数达到了阈值,就会触发拒绝策略。

所以如果我们希望这个任务不进入到这样一个阻塞队列,那么只需要去影响第二个步骤的执行逻辑就可以了。

在java的线程池里面,它的构造方法里面有一个参数,可以去修改阻塞队列的这样一个类型,其中有一个阻塞队列叫synchronousQueue,这个队列它是不能存储任何元素的阻塞队列,它的特性是每生产一个任务就必须指派一个消费者来处理这个任务,否则就会阻塞生产者。那么基于这个特性,我们只需要去把线程池的阻塞队列替换成synchronousQueue就好了,它就能够直接去避免任务进入到阻塞队列,而是直接去启动最大线程数量去处理这样一个任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值