关于执行一个新任务的逻辑

关于执行一个新任务的逻辑

按照源码的逻辑,如果线程池在运行状态,但是任务队列却满了,那么就会addWorker(command, false);

这样的话,那岂不是队列里的任务还没执行,就先执行了最后才进来的command任务?这好像不太符合逻辑的吧,比如对于服务器来讲,已经有n个请求等待很久了,这时候n+1个请求来时却先响应了它,反而让前面n个请求继续等着,是不是有点过分啊。

不应该先到的先处理吗。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

抱歉同学,这里老师是理解错误。线程池在运行状态,任务队列满了,新创建非核心线程会执行最后进来的程序。这是程序代码设定的,通常情况是只是尽快执行任务,对任务执行先后顺序没有过多要求。如果需要按顺序执行的任务,例如秒杀场景,可以配合使用其他方式,例如消息队列来具体实现。

祝:学习愉快~

好帮手慕阿满 2020-10-21 11:12:43

同学你好,同学的理解有点问题。线程池在运行状态,任务队列也满了,此时的线程数不大于最大线程数,会新创建线程继续执行任务,不是先执行最后进来的任务。

  • 提问者 易萧 #1
    但是addWorker创建新线程传的是command任务进去啊,command不就是新任务,也是因为command进不去队列才创建的新线程啊,addWorker(command)中command参数不就是作为新线程的第一个任务的吗
    2020-10-21 12:21:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师