基于CompletableFuture+多线程+内存分页实现的批量查询技巧

本文介绍了如何使用CompletableFuture、多线程和内存分页来优化批量查询操作。首先,通过创建专用线程池处理批量导出任务。接着,获取总记录数判断是否需要批量处理,如果需要则采用分批异步查询。最后,收集并处理所有异步返回的数据,提高程序性能。
摘要由CSDN通过智能技术生成

背景 

在实际工作中,往往会有批量查询或批量导出这样的需求,但是如果数据量很大,就不能简单的使用 in 查询来解决问题。常见的优化思路是分批处理(分而治之),今天我就来讲一下,基于CompletableFuture+多线程+内存分页实现的批量查询技巧。

 实现思路

  • 定义一个线程池,专门用来处理批量导出业务,和其它业务隔离。
  • 先获取需要处理的总记录数,判断是否需要批量处理,如果不需要,则直接返回,如果需要则进行批量异步处理,批量处理过程中会使用到自定义的线程池。
  • 统一收集异步返回的数据,进行下一步处理即可。
  • 完毕

原料

  • ThreadPoolTaskExecutor
  • CompletableFutrue

实现细节

定义用于批处理的线程池 ThreadPoolTaskExecutor,也可以用 Java 原生自带的线程池 Executors

/**
 * Spring 线程池配置组件
 *
 * @Author Zack
 */
@Configuration
@Ena
  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Easylogging是一个简单易用的日志库,它可以帮助开发人员在程序运行过程中记录并追踪各种日志信息。它提供了许多便捷的方法,使开发人员能够根据实际需要对日志进行配置,并将其输出到不同的地方,如控制台、文件等。 多线程是一种在同一个进程中同时执行多个任务的方法。多线程可以提高程序的并发性和效率,但也会带来一些问题。其中一个常见的问题是内存暴涨。 内存暴涨指的是程序在运行过程中占用的内存空间急剧增加。多线程程序中,每个线程都有自己的栈空间,用于存储局部变量等数据。当多个线程同时执行时,可能会导致大量的栈帧被同时创建和销毁,从而占用大量的内存空间。此外,多线程程序还可能存在共享数据的问题,需要使用一些同步机制来保证数据的正确性,这也会增加内存的开销。 为了解决多线程程序中的内存暴涨问题,可以采取一些措施。首先,可以对线程进行优化,尽量减少线程的创建和销毁次数,减少栈空间占用。其次,可以优化共享数据的访问方式,使用一些高效的同步机制,如读写锁、原子操作等,减少内存开销。此外,还可以使用一些内存管理工具来监测和调优程序的内存使用情况,及时发现和解决内存暴涨问题。 总结来说,Easylogging可以帮助我们方便地记录和追踪日志信息,多线程能够提高程序的并发性和效率,但同时也会带来内存暴涨的问题。为了解决内存暴涨,我们可以采取一些优化措施,减少线程的创建和销毁次数,优化共享数据的访问方式,并使用内存管理工具监测和调优程序的内存使用情况。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HiiZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值