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());
            }
        }
  • 相关阅读:
    域环境的搭建 (超级详细)
    sqli-labs(10)
    sqli-labs(9)
    mysql源码安装(5.1)
    查看mysql apache php nginx的编译参数
    LAMP的安装
    Mysql的安装(二进制免编译包) 5.1版本
    更改yum网易 阿里云的yum源。
    yum安裝的包如何保留到本地
    磁盘分区
  • 原文地址:https://www.cnblogs.com/huanglei2010/p/11955596.html
Copyright © 2011-2022 走看看