线程数控制

项目需求: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);
            }
        }
相关推荐
Flittly几秒前
【AgentScope Java新手村系列】(4)结构化输出
java·spring boot·spring·ai
wzg19690226wzg2 分钟前
rust 学习 泛型
开发语言·学习·rust
techdashen3 分钟前
Rust 基础设施团队 2025 Q4 回顾与 2026 Q1 计划
开发语言·后端·rust
红宝村村长4 分钟前
torch.autograd.Function.apply()
开发语言·python
AI科技星4 分钟前
《数术工坊:非欧射影录》类型:硬核光影·几何本源
c语言·开发语言·网络·量子计算·agi
何以解忧,唯有..12 分钟前
Python 中的继承机制:从基础到高级用法详解
java·开发语言·python
Yiyaoshujuku17 分钟前
化合物数据集API接口(数据结构及样例)
java·网络·数据结构
plainGeekDev30 分钟前
算法刷题笔记:一维DP没那么难,状态想清楚就赢了一半
java·算法·面试
IceBing35 分钟前
还在一个个连接 Arthas?这个开源平台支持批量诊断 JVM
java
SL_staff41 分钟前
《如何用规则引擎替代if-else?JVS-Rules可视化编排比硬编码强在哪里?》
java·低代码·架构