线程池阻塞队列长度设置失误导致任务一直被阻塞未能执行

news2024/11/17 9:14:39

1、生产环境中有个接口耗时比较久,然后自己的阻塞队列没有设置默认值,导致后续提交过来的任务一直在阻塞队列中,具体代码如下


@Slf4j
@RestController
@RequestMapping(value = "/vman/task/run/")
public class RunTask2Controller {
    // 阻塞队列没有设置,则默认是Integer.MAX_VALUE,而核心线程数是1,会导致后续提交的任务一直放在队列里
    private final ExecutorService executorService = new ThreadPoolExecutor(1,5, 180L, TimeUnit.SECONDS,
            new LinkedBlockingQueue(), new ThreadFactoryBuilder().setNameFormat("thread-repeater-run-%d").build());
    private ExecutorService repeaterExecutorService = TransferExecutors.getTtlExecutorService(executorService);

    @RequestMapping(value = "/run_job2", method = RequestMethod.GET)
    public BasicResult runTask2(@RequestParam(value = "id") String id) throws SQLException {
        BasicResult<RunTaskResult> basicResult = new BasicResult<>();
        final String userName = UserInfoHolder.getUserOa();
        log.info("run_job请求参数信息1,userName:{},id:{}", userName, JSONObject.toJSONString(id));
        repeaterExecutorService.execute(new Runnable() {
            @Override
            public void run() {
                log.info("run_job请求参数信息2,userName:{},id:{}", userName, JSONObject.toJSONString(id));
                try {
                    Thread.sleep(10000000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        basicResult.setCodeMessage("0", "任务执行中");
        return basicResult;
    }
}

2、线程池的执行逻辑

  1. 如果workerCount < corePoolSize,则创建并启动一个线程来执行新提交的任务;
  2. 如果workerCount >= corePoolSize,且线程池内的阻塞队列未满,则将任务添加到该阻塞队列中;
  3. 如果workerCount >= corePoolSize && workerCount < maximumPoolSize,且线程池内的阻塞队列已满,则创建并启动一个线程来执行新提交的任务;
  4. 如果workerCount >= maximumPoolSize,并且线程池内的阻塞队列已满, 则根据拒绝策略来处理该任务, 默认的处理方式是直接抛异常。

3、更加上述线程池执行逻辑,因为业务执行很长时间,而阻塞队列设置很大,则导致后续提交的任务都放到阻塞队列了,从而导致任务挤压。改进措施,根据任务执行时间合理设置LinkedBlockingQueue的大小,比如设置20个,最大线程数也设置大点。

Java线程池实现原理及其在美团业务中的实践 - 美团技术团队

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hover:借贷新势力崛起,在经验与创新中找寻平衡

复苏中的Cosmos 如果让我选择一个最我感到可惜的区块链项目&#xff0c;我会选择Cosmos。 Cosmos最早提出并推动万链互联的概念&#xff0c;希望打通不同链之间的孤岛&#xff0c;彼时和另一个天王项目Polkadot号称跨链双雄。其跨链技术允许不同的区块链网络互相通信&#xf…

一文1000字基于Jenkins实现接口自动化持续集成!

一、JOB项目配置 1、添加描述 可选选项可填可不填 2、限制项目的运行节点 节点中要有运行环境所需的配置 节点配置教程&#xff1a;https://blog.csdn.net/YZL40514131/article/details/131504280 3、源码管理 需要将脚本推送到远程仓库中 4、构建触发器 可以选择定时构建…

设计模式:备忘录模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《中介者模式》 下一篇《状态模式》 简介&#xff1a; 备忘录模式&#xff0c;它是一种软件设计模式&#xff0c;它允许在不破坏封闭的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象…

基于springboot实现网吧管理系统项目【项目源码+论文说明】

基于springboot实现网吧管理系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#x…

CH9329芯片应用—简介

概述 CH9329是一款串口转USB HID设备功能芯片&#xff0c;根据不同的工作模式&#xff0c;HID设备可以识别为&#xff1a;USB键盘设备、USB鼠标设备或者自定义HID类设备。接收串口数据&#xff0c;并自动根据串口工作模式进行数据解析&#xff0c;解析完成后按照HID类设备规范…

【漏洞复现】广联达 Linkworks办公OA SQL注入

广联达OA介绍 广联达办公OA是一款综合办公自动化解决方案&#xff0c;旨在提高组织内部的工作效率和协作能力。它提供了一系列功能和工具&#xff0c;帮助企业管理和处理日常办公任务、流程和文档。 资产收集 fofa&#xff1a;fid”/yV4r5PdARKT4jaqLjJYqw”或者body”/Servi…

Windows平台下将exe及其dll封包到新的exe

Windows平台下将exe及其dll封包到新的exe 〇、项目需求一、生成 exe二、通过 Dependencies 寻找所需dll三、将所需 dll 复制到 exe 同级目录下3.1 通过 python 脚本自动处理3.2 使用 Everthing 搜索特定dll3.3 验证 dll 是否完备 四、使用 Enigma Virtual Box 对 dll 和 exe 进…

ch3_6多线程举例

作者丨billom 来源丨投稿 编辑丨GiantPandaCV 云端深度学习的服务的性能加速通常需要算法和工程的协同加速&#xff0c;需要模型推理和计算节点的融合&#xff0c;并保证整个“木桶”没有太明显的短板。 如何在满足时延前提下让算法工程师的服务的吞吐尽可能高&#xff0c;尽…

Photoshop2024磨皮滤镜插件Portraiture

想要快速提升人像修图效果&#xff0c;让皮肤看起来更加光滑细腻吗&#xff1f;那么你可以尝试使用Photoshop磨皮滤镜插件。这些插件能够让你在短时间内快速有效地进行人像处理&#xff0c;无论是对于专业的设计师还是初学者来说都是非常实用的工具。 接下来&#xff0c;让我为…

AI时代中小企业算力需求爆发,惠普发布新品战99 Monster满血高算工作站

第17届DEMO CHINA创新中国峰会10月25日至26日在北京举行&#xff0c;吸引了国内众多优秀创新创业项目的积极参与。作为本届DEMO CHINA独家战略合作伙伴&#xff0c;惠普在大会上正式发布战家族新品战99 Monster满血高算工作站&#xff0c;满足AI时代中小企业对于算力的爆发式需…

Live800:客服中心质检管理的五大方法

客服中心质检管理是企业提供优质服务和客户满意度的关键。因此&#xff0c;企业必须采用适当的方法来管理客服质检以确保服务质量。本文将介绍客服中心质检管理的五大方法。 1、建立清晰的服务标准 建立清晰的服务标准是提高客服质量的关键因素。服务标准可以包括快速响应时间…

TypeScript详解

一、是什么 TypeScript 是 JavaScript 的类型的超集&#xff0c;支持ES6语法&#xff0c;支持面向对象编程的概念&#xff0c;如类、接口、继承、泛型等 超集&#xff0c;不得不说另外一个概念&#xff0c;子集&#xff0c;怎么理解这两个呢&#xff0c;举个例子&#xff0c;如…

广受欢迎的 VLC Media Player 开源媒体播放器软件已更新到 3.0.19 版

导读广受欢迎的 VLC Media Player 开源媒体播放器软件已更新到 3.0.19 版&#xff0c;这是继 VLC 3.0.18 发布近一年后的又一版本&#xff0c;其中包含大量改进和错误修复。 VLC 3.0.19 版本的亮点包括改进了软件解码对 AV1 HDR 的支持&#xff0c;支持 WAV 音频文件的 RIFF IN…

基于SSM的罪犯信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

数字化工厂:连接、集成与数据融合

随着科技的不断发展&#xff0c;数字化工厂管理系统逐渐成为制造业的重要趋势。数字化工厂的核心在于连接、集成与数据融合&#xff0c;通过这些技术手段&#xff0c;实现对设备、生产线、工厂、供应商、产品、客户等各个环节的全面优化&#xff0c;提升企业的生产效率和产品质…

字符串中的assert和strcat

assert&#xff1a;函数原型是&#xff1a;void assert( int expression );其作用是现计算表达式 expression &#xff0c;如果其值为假(即为0)&#xff0c;那么它先 stderr 打印一条出信息,然后通过调用 abort 来终止程序运行。使用assert 的缺点是&#xff0c;频繁的调用会影…

GoLong的学习之路(十二)语法之标准库 flag的使用

上回书说到&#xff0c;fmt的标准库的一些常用的使用函数。这次说flag的使用&#xff0c;以下这些库要去做了解。不然GG&#xff0c;Go语言内置的flag包实现了命令行参数的解析&#xff0c;flag包使得开发命令行工具更为简单。 文章目录 os.Argsflag包flag.Type()flag.TypeVar(…

AI口语APP的实现

AI口语应用程序是一种借助人工智能技术&#xff0c;旨在帮助用户提高口语能力、练习语言技能以及进行交流和学习语言的应用程序。这类应用通常提供以下主要功能&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交…

Ansys Speos | SPEOS 在HUD杂光分析中的应用

概述 随着汽车智能座舱的普及&#xff0c;HUD的装车率也随之增加&#xff0c;未来也可能会成为车内座舱的标配。而HUD是一个由光学&#xff0c;机械&#xff0c;电子&#xff0c;软件组成的复杂的高科技产品&#xff0c;其所在的汽车座舱是很复杂的环境。我们需要对HUD进行诸如…

2023年05月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 可以对Python代码进行多行注释的是&#xff1f;&#xff08; &#xff09; A: # B: " " C: ‘’’ ‘’’…