mysql 要使用 in 查询,in 的List比较大,多线程分解List查询
public List<UserCountBiz> getAttendByPageList(List<Long> list, int pageSize) throws Exception {
int totalCount = list.size();
int m = totalCount % pageSize;
int pageCount = m == 0 ? (totalCount / pageSize) : (totalCount / pageSize + 1);
List<UserCountBiz> resultList = new ArrayList<>();
BlockingQueue<Future<List<UserCountBiz>>> queue = new LinkedBlockingQueue();
for (int i = 1; i <= pageCount; i++) {
Thread.sleep(0);
Future<List<UserCountBiz>> future;
if (m == 0) {
List<Long> subList = list.subList((i - 1) * pageSize, pageSize * (i));
future = getAttendCountSubList(subList);
} else {
if (i == pageCount) {
List<Long> subList = list.subList((i - 1) * pageSize, tot

该博客探讨了如何在Spring Boot中利用多线程和Future处理大规模IN查询。通过将大List拆分为小的subList,使用@Async注解实现异步查询,并将结果存储到阻塞队列,最后进行结果合并,有效提高了查询效率。

79

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



