线程数控制

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

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

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

java 复制代码
 private final Map<String, Boolean> ongoingRequests = new ConcurrentHashMap<>();

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

java 复制代码
 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);
            }
        }
相关推荐
老马识途2.022 分钟前
关于跨域问题的总结
java·前端
魔力女仆40 分钟前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
都叫我大帅哥1 小时前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng1 小时前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2401_894915532 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
2501_936415692 小时前
可变参数&综合练习&斗地主游戏
java·windows·游戏
麻瓜老宋2 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
极客先躯3 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq3 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
wang09074 小时前
自己动手写一个spring之aop_1
java·后端·spring