7.多线程实现执行自动化案例

1.创建分页工具类

package com.thread.utils;


import java.util.ArrayList;
import java.util.List;


public class PageUtil {
    /**
     * 分页
     *
     * @param list 切割数据集合
     * @param pageSize 每页记录数
     * @param <T>
     * @return
     */
    public static<T> List<List<T>>splitList(List<T> list, int pageSize){
            int listSize=list.size();
            int page=(listSize+(pageSize-1))/pageSize;
            List<List<T>>listArray=new ArrayList<List<T>>();
            for(int i=0;i<page; i++){
            List<T> subList=new ArrayList<T>();
            for(int j=0;j<listSize; j++){
            int pageIndex=((j+1)+(pageSize-1))/pageSize;
            if(pageIndex==(i+1)){
            subList.add(list.get(j));
            }
            if((j+1)==((j+1)*pageSize)){
            break;
            }
            }
            listArray.add(subList);
            }
            return listArray;
            }
}

2.创建自动化用例实体类:

package com.thread.utils;

public class CaseEntity {
    private String case_id;
    private String case_context;

    public String getCase_id() {
        return case_id;
    }

    public void setCase_id(String case_id) {
        this.case_id = case_id;
    }

    public String getCase_context() {
        return case_context;
    }

    public void setCase_context(String case_context) {
        this.case_context = case_context;
    }

    @Override
    public String toString() {
        return "CaseEntity{" +
                "case_id='" + case_id + '\'' +
                ", case_context='" + case_context + '\'' +
                '}';
    }
}

3.创建一个多线程类:

package com.thread.utils;

import com.jdbc.utils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class TestThread implements Runnable {

    private List<CaseEntity> caseEntityList;

    public TestThread(List<CaseEntity> userEntityList) {
        this.caseEntityList = userEntityList;
    }

    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public void run() {
        for (CaseEntity caseEntity : caseEntityList) {
            String case_id = caseEntity.getCase_id();
            String new_case_context = Thread.currentThread().getName() + case_id;
            String sql = "update tst_pdf_auto_case set case_context=? where case_id=?";

            template.update(sql, new_case_context, case_id);
        }
    }
}

4.创建主线程执行类:

package com.thread.utils;

import com.jdbc.utils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class BatchThread {

    public static void main(String[] args) {

        List<CaseEntity> userList = initUser();
        //自定义按1000来进行分页
        int userCount = 100000;
        List<List<CaseEntity>> pageList = PageUtil.splitList(userList, userCount);
        for (int i = 0; i < pageList.size(); i++) {
            List<CaseEntity> caseEntityList = pageList.get(i);
            TestThread testThread = new TestThread(caseEntityList);
            Thread thread = new Thread(testThread);
            thread.start();
        }
    }

    public static List<CaseEntity> initUser() {
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        List<CaseEntity> caseEntityList = new ArrayList<CaseEntity>();

        String sql = "select * from tst_pdf_auto_case ";
        List<Map<String, Object>> maps = template.queryForList(sql);
        for (Map<String, Object> map : maps) {
            String case_id = (String) map.get("case_id");
            String case_context = (String) map.get("case_context");
            CaseEntity caseEntity = new CaseEntity();
            caseEntity.setCase_id(case_id);
            caseEntity.setCase_context(case_context);
            caseEntityList.add(caseEntity);
        }
        return caseEntityList;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,911评论 1 32
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 5,692评论 0 12
  • 一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Andr...
    lucas777阅读 10,654评论 2 54
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,144评论 0 4
  • 夕阳无限好 只是近黄昏 近黄昏又如何 能美丽一场己足矣 生命本是一场修行 你会遇上谁 谁将会遇上你都是缘份 不管你...
    Angel李子汐阅读 2,755评论 20 29

友情链接更多精彩内容