Java多线程分页查询数据库_java使用多线程查询大批量数据

本文介绍了一种使用Java多线程查询大数据量的方法,通过线程池和任务分配,优化了数据库查询效率。具体实现包括查询表总数据量、按CPU核数切分任务、创建固定线程池、使用Callable和Future获取结果,以及在多线程中通过工具类获取Spring Bean来执行数据库查询。
摘要由CSDN通过智能技术生成

前言

在某些时候,一旦单表数据量过大,查询数据的时候就会变得异常卡顿,虽然在大多数情况下并不需要查询所有的数据,而是通过分页或缓存的形式去减少或者避免这个问题,但是仍然存在需要这样的场景,比如需要导出一大批数据到excel中,导出数据之前,首先得把数据查询出来吧?这个查询的过程,数据量一旦过大,单线程查询数据将会成为瓶颈,下面尝试使用多线程来尝试查询一张数据量较大的表

由于代码逻辑不是很难,直接上代码,关键的地方会有代码注释和说明,总体实现思路:

查询表的数据总量

线程切分,根据本机CPU的核数配置合适数量的线程处理数,根据数据总量为不同的线程分配不同的查询数据量分段,即不同的线程查询不同分段的数据

将各个查询数据的线程提交至线程池,这里使用的线程是带有返回结果的异步线程

1、测试控制器

@GetMapping("/getSysLogMulti")

@ApiOperation(value = "多线程获取日志数据", notes = "多线程获取日志数据", produces = "application/json")

public List getSysLogMulti() {

return operLogService.getSysLogMulti();

}

2、业务实现类

@Autowired

private MultiThreadQueryUtil multiThreadQueryUtil;

@Override

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值