zoukankan      html  css  js  c++  java
  • java多线程中ArrayList应当替换为CopyOnWriteArrayList

    @ApiOperation(value = "获取子公司sub,省分prov,总部hq, 全部 total  指标值中的 最高分,最低分,平均分")
        @RequestMapping(value = "/getMaxAndMinAndAverageKpiValue", method = RequestMethod.POST)
        private Map<String, Object> getMaxAndMinAndAverageKpiValue(@RequestBody KpiStatisticsReq req) {
            if (req.getKpiIds() == null) {
                return ResponseUtil.fail("请输入 kpi指标的kpiId数组");
            }
            try {
                List<HashMap<String, Object>> list = new CopyOnWriteArrayList();
    
                if (req.getBranch() == null) {
                    req.setBranch("total");
                }
                 List<String> ldapOrgCodesList1 = soaOrgWithPathBranchServiceImpl.queryLdapOrgCodesByBranch(req.getBranch());
                List<String> ldapOrgCodesList2= new ArrayList<>();
                ldapOrgCodesList2.addAll(ldapOrgCodesList1);
                if (req.getLdapOrgCodes()!=null){
                    ldapOrgCodesList2.addAll(Arrays.asList(req.getLdapOrgCodes()));
                }
                final List<String> ldapOrgCodesList=ldapOrgCodesList2.stream().distinct().collect(Collectors.toList());
    
                ForkJoinPool forkJoinPool = new ForkJoinPool();
                for (Integer kpiId : req.getKpiIds()) {
                    forkJoinPool.execute(() -> {
                        Kpi kpi = kpiServiceImpl.queryInfoByNatrualKey(kpiId);
                        // 获取 子公司编码 ldap code
                        HashMap<String, Object> datas = new HashMap<>();
                        datas.put("kpi", kpi);
                        // List<KpiValue> appKpiListAll = new ArrayList<>();
                        List<Double> doubles = new ArrayList<>();
                        KpiValue appKpiParam = new KpiValue();
                        for (String scope : ldapOrgCodesList) {
                            appKpiParam.setScope(scope);
                            appKpiParam.setKpiId(kpiId);
                            // List<KpiValue> appKpiList = kpiValueService.searchInfos(appKpiParam);
                            KpiValue kpiValue = kpiValueService.searchOne(appKpiParam);
                            if (kpiValue != null && kpiValue.getValue() != null && !kpiValue.getValue().trim().equals("")) {
                                // doubles.add(Double.parseDouble(kpiValue.getValue()));
                                doubles.add(new BigDecimal(kpiValue.getValue()).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
                            }
                        }
                        if (doubles.size() > 0) {
                            DoubleSummaryStatistics statistics = doubles.stream().mapToDouble(x -> x).summaryStatistics();
                            datas.put("max", BigDecimal.valueOf(statistics.getMax()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("min", BigDecimal.valueOf(statistics.getMin()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("average", BigDecimal.valueOf(statistics.getAverage()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("sum", BigDecimal.valueOf(statistics.getSum()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("count", statistics.getCount());
                        }
                        list.add(datas);
                    });
                }
                while (forkJoinPool.getActiveThreadCount() != 0) {
                    Thread.sleep(100);
                }
                forkJoinPool.shutdown();
                return ResponseUtil.ok(list);
            } catch (Exception e) {
                e.printStackTrace();
                LoggerUtils.error(getClass(), "查询失败!" + e.getMessage());
                return ResponseUtil.fail("查询失败!" + e.getMessage());
            }
        }
  • 相关阅读:
    centos 安装docker-ce
    quartz.net .netcore 定时任务部署到linux
    c# 获取linux 磁盘信息
    nginx 安装
    async await 理解
    Remote side unexpectedly closed network connection
    centos 安装。net
    yum 操作
    centos7下安装mysql5.7
    git 本地仓库版本无法从远程更新到本地
  • 原文地址:https://www.cnblogs.com/huanglei2010/p/11955596.html
Copyright © 2011-2022 走看看