使用线程池查询数据
操作流程
- 查询出表的数据总量。
- 数据的切分,根据本机CPU的核数配置合适数量的线程处理数,根据数据总量为不同的线程分配不同的查询数据量分段,即不同的线程查询不同分段的数据。
- 将各个查询数据的线程提交至线程池,这里使用的线程是带有返回结果的异步线程。(这样能把所有查询结果合并,才能进行下一步的操作。拿不到处理后的数据还怎么做下一步操作呢,所以一点要选择带有返回结果的线程)
具体实现
controller层查询数据
@GetMapping("count")
public ResultJson getCount(){
MultiThreadQueryUtil multiThreadQueryUtil=new MultiThreadQueryUtil();
List<List> count=multiThreadQueryUtil.getMultiCombineResult();
return ResultJson.ok(count);
}
最主要的是是使用MultiThreadQueryUtil这个类中的getMultiCombineResult()方法进行数据查询
MultiThreadQueryUtil类
@Component
public class MultiThreadQueryUtil {
public static SpringContextUtil springContextUtil = new SpringContextUtil();
public List<List> getMultiCombineResult(){
List<List> result = new ArrayList<>();
UserMapper userMapper= (UserMapper) springContextUtil.getBean("userMapper");
int count=userMapper