问题分析
将查询条件subList分为70个一组,通过CompletableFuture执行异步多线程分批次查询数据库,查询完成后在whenCompleteAsync方法中将结果存储在resultList中。
诡异的情况发生了,查询出来的结果resultList中有10000个数据,其中70 * n个为null的对象
try {
//分页的参数 每个大小70 总大小100000
List<List<Long>> subList = ......;
//结果集
List<QueryEntity> resultList = new ArrayList<>();
//全流式处理转换成CompletableFuture[]+组装成一个无返回值CompletableFuture,join等待执行完毕。返回结果whenComplete获取
CompletableFuture[] cfs = subList.stream().map(list -> CompletableFuture.supplyAsync(() -> queryS

文章描述了一个问题,使用CompletableFuture进行分批异步查询时,结果集中出现了大量null对象。经过排查,问题可能出在并发操作导致的数据同步问题,通过将List替换为CopyOnWriteArrayList解决了空对象问题。
最低0.47元/天 解锁文章
829

被折叠的 条评论
为什么被折叠?



