线程数控制

项目需求: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);
            }
        }
相关推荐
九丶弟3 分钟前
SpringBoot的cache使用说明
java·spring boot·spring·cache
weixin_4454766822 分钟前
Java并发编程——synchronized的实现原理与应用
java·开发语言·并发·synchronized
yi碗汤园23 分钟前
【超详细】C#自定义工具类-StringHelper
开发语言·前端·unity·c#·游戏引擎
sali-tec27 分钟前
C# 基于halcon的视觉工作流-章49-网面破损
开发语言·图像处理·算法·计算机视觉·c#
YuanlongWang29 分钟前
c# ABP vNext 框架详解及其模块化开发思想介绍
开发语言·c#
张人玉1 小时前
WPF布局控件(界面骨架核心)
开发语言·c#·wpf·布局控件
闲人编程1 小时前
使用MLflow跟踪和管理你的机器学习实验
开发语言·人工智能·python·机器学习·ml·codecapsule
看兵马俑的程序员1 小时前
RAG实现-本地PDF内容加载和切片
开发语言·python·pdf
专注前端30年1 小时前
【JavaScript】reduce 方法的详解与实战
开发语言·前端·javascript
两个人的幸福online1 小时前
php使用腾讯云服务
开发语言·php·腾讯云