中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • java多次嵌套循環查詢數據庫導致代碼中數據處理慢如何解決

java多次嵌套循環查詢數據庫導致代碼中數據處理慢如何解決

發布時間:2023-03-15 14:37:39 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

這篇文章主要介紹“java多次嵌套循環查詢數據庫導致代碼中數據處理慢如何解決”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“java多次嵌套循環查詢數據庫導致代碼中數據處理慢如何解決”文章能幫助大家解決問題。

    業務現象

    代碼中有一部分代碼多次嵌套循環和數據處理,執行速度很慢

    解決方案

    通過多線程

    1、啟用多線程

    private final static Executor executor = Executors.newFixedThreadPool(3);

    2、初始化設置count

    即等待(await)count個線程或一個線程count次計數,通過工作線程來countDown計數減一,直到計數為0,await阻塞結束;目的:保證所有線程都走完  

    final CountDownLatch latch = new CountDownLatch(dataList.size());

    3、需要重新run

    需要多線程的代碼寫在run中

     @Override
           public void run() { 
    
                    //業務代碼處理
    
                    //countDown計數減一
    
                     latch.countDown();
    
    }

    4、阻塞線程

      // 等待所有工作線程結束
                latch.await();

    關鍵代碼

     private final static Executor executor = Executors.newFixedThreadPool(3);//啟用多線程
     
     public Result getList(@RequestBody StatusDbSelectParam param){
     
    PageHelper.startPage(param.getPageNum(), param.getPageSize());
            List<Map<String, Object>> dataList = statusDbService.selectByTime(tableName,             columnNames.toString(), param.getStartTime(), param.getEndTime());
            //初始化設置count,即等待(await)count個線程或一個線程count次計數,通過工作線程來countDown計數減一,直到計數為0,await阻塞結束
            final CountDownLatch latch = new CountDownLatch(dataList.size());
            for(int k =0;k<dataList.size();k++) {
                final int i = k;
                String finalTableName = tableName;
                executor.execute(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Map<String, Object> map = dataList.get(i);
                            for (String pid : map.keySet()) {
                                String val = String.valueOf(map.get(pid));
                                String columPid = pid.substring(2, pid.length()).toLowerCase();
                                List<MonitorRuleEntity> list = monitorRuleService.listMonitorRule(columPid, finalTableName);
                                String status = "";
                                //循環規則數據 判斷監測點是否報警 更新狀態
                                for (int j = 0; j < list.size(); j++) {
                                    Boolean flag = DevHealthStatusFactory.getInstance().getResultMapByRule(val, list.get(j));
                                    if (flag) {
                                        if (j == 0) {
                                            status = "A";
                                            break;
                                        } else if (j == 1) {
                                            status = "B";
                                            break;
                                        } else if (j == 2) {
                                            status = "C";
                                            break;
                                        }
                                    }
                                }
                                if (pid.equalsIgnoreCase(timeColumnName)) {
                                    map.put(pid, val);
                                } else {
                                    map.put(pid, val + "_" + status);
                                }
                            }
                            latch.countDown();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
            try {
                // 等待所有工作線程結束
                latch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return ResultMsg.successMsg().data(new PageInfo<>(dataList));
        }

    關于“java多次嵌套循環查詢數據庫導致代碼中數據處理慢如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    常山县| 临潭县| 小金县| 靖安县| 兴仁县| 达日县| 宝兴县| 进贤县| 吉林省| 新和县| 于都县| 比如县| 定西市| 鹤庆县| 涡阳县| 广河县| 宿迁市| 阳山县| 江津市| 翁牛特旗| 烟台市| 伊宁市| 紫云| 沙田区| 城市| 榆社县| 峨山| 洱源县| 翼城县| 吉木乃县| 拜城县| 库尔勒市| 远安县| 嘉善县| 井冈山市| 叙永县| 临桂县| 清新县| 奉化市| 基隆市| 军事|