html5网站建设基本流程,百度怎么免费推广,欧派全屋定制多少钱一平米,郑州网站建设企业项目需求#xff1a;javaMATLAB并行开发 在java中调用由MATLAB转成的jar包的代码#xff0c;需要调用到底层的MATLAB服务。每次只能一个线程调用#xff0c;当多个线程同时调用MATLAB时#xff0c;MATLAB会报错。导致整个java服务挂掉。
现在增加线程控制#xff0c;每…项目需求javaMATLAB并行开发 在java中调用由MATLAB转成的jar包的代码需要调用到底层的MATLAB服务。每次只能一个线程调用当多个线程同时调用MATLAB时MATLAB会报错。导致整个java服务挂掉。
现在增加线程控制每次只允许一个线程调用MATLAB代码。
使用ConcurrentHashMap来确保线程数量在调用的service中定义一个变量用来保存当前调用的请求 private final MapString, 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);}}