固定数量线程操作案例

//批量执行sql

 public void updateSqlSer(String sqls) {

        Date startTime = new Date();
        int taskSize = 5;
        // 创建一个线程池
        ExecutorService executorService = Executors.newFixedThreadPool(taskSize);

        // 创建多个任务
        List<String> list = Arrays.asList(sqls.split(";"));
        int perSize =  0;
        if(list.size() % taskSize == 0){
            perSize = list.size() / taskSize;
        }else {
            perSize = (list.size() / taskSize) + 1;
        }
        for (int i = 0; i < taskSize; i++) {
            if(i * perSize > list.size()){
                return;
            }
            List<String> sqlList = list.subList(i * perSize, Math.min(((i + 1) * perSize), list.size()));
            if(sqlList.size() == 0){
                return;
            }

            executorService.submit(() -> {
                for (String sql : sqlList) {
                    if (!Strings.isNullOrEmpty(sql) && !sql.equals(";")) {
                        metaService.executeSql(sql);
                    }
                }
            });
        }
        // 关闭线程池
        executorService.shutdown();
        //等待所有任务都执行结束
        while (true) {
            //所有的子线程都结束了
            if (executorService.isTerminated()) {
                Date endTime = new Date();
                logger.info("---- 主程序结束运行 ----,程序运行耗时【" + (endTime.getTime() - startTime.getTime()) + "毫秒】");
                break;
            }
        }
    }
`
posted @ 2023-04-21 10:08  SuperSuperWang  阅读(24)  评论(0)    收藏  举报