当前位置: 首页 > news >正文

线程数控制

项目需求:java+MATLAB并行开发    在java中调用由MATLAB转成的jar包的代码,需要调用到底层的MATLAB服务。每次只能一个线程调用,当多个线程同时调用MATLAB时,MATLAB会报错。导致整个java服务挂掉。

现在增加线程控制,每次只允许一个线程调用MATLAB代码。

使用ConcurrentHashMap来确保线程数量,在调用的service中定义一个变量用来保存当前调用的请求

 private final Map<String, Boolean> ongoingRequests = new ConcurrentHashMap<>();

每次有新的请求进入时,判断是否已经存在相同的请求  存在则返回报错信息“服务器繁忙,请稍后重试”

 String requestKey = req.toKey();System.out.println("-------"+ongoingRequests.size());synchronized (ongoingRequests) {if (ongoingRequests.size() > LineEnum.LINE_THREE.getLineNumber() || ongoingRequests.containsKey(requestKey)) {return new AbnormalResultDTO(ERROR_SERVICE_BUSY.getCode_default(), ERROR_SERVICE_BUSY.getComment());}// 都是matlab代码调用if (req.getOrbitType() == HALO_PLOT.getOrbitCode() || req.getOrbitType() == MOON_EARTH.getOrbitCode() ||  req.getOrbitType() == EARTH_MOON.getOrbitCode()){ongoingRequests.put(requestKey, true);}}try {OrbitPeriodVo result = algorithmService.getOrbitPeriodData(req);return Objects.isNull(result) ?new AbnormalResultDTO(ERROR_RESULT_MESSAGE.getCode_default(), ERROR_RESULT_MESSAGE.getName_default()) :new NormalResultDTO<>(result);} finally {synchronized (ongoingRequests) {ongoingRequests.remove(requestKey);}}

http://www.lryc.cn/news/114142.html

相关文章:

  • DC-6靶机
  • SpringCloud入门Day01-服务注册与发现、服务通信、负载均衡与算法
  • java-IDEA MAVEN查看依赖树,解决jar包重复和冲突
  • 参考RabbitMQ实现一个消息队列
  • SpringBoot+JWT
  • Cad二次开发EqualPoint
  • 20230806将ASF格式的视频转换为MP4
  • 【MySQL】——常用接口API即相关函数说明
  • ts + axios + useRequest (ahooks)—— 实现请求封装
  • Springboot @Validated注解详细说明
  • STM32初学者,到底选标准库还是HAL库?
  • 小学生作业随机加减乘除运算计算习题答案 html源码
  • nvm下载安装配置
  • 2023-08-07力扣每日一题
  • uni——不规则tab切换(skew)
  • Docker安装Grafana以及Grafana应用
  • OpenSource - 分布式重试平台
  • oracle稳定执行计划
  • docker安装neo4j
  • 第十五章 定义 HL7 的 DTL 数据转换
  • 【笔记】移动光猫改桥接
  • 网络安全进阶学习第十四课——MSSQL注入
  • 【C语言】初阶结构体
  • 24届近5年南京理工大学自动化考研院校分析
  • 5.PyCharm基础使用及快捷键
  • RabbitMQ的安装
  • GPU版PyTorch对应安装教程
  • 医学影像PACS临床信息系统源码
  • Python(Web时代)——jinja2模板
  • 酷开系统 | 酷开科技,让数据变得更有价值!