分段方法:
/**
* 集合按长度分组
*
* @param list
* @param size
* @param <T>
* @return
*/
public static <T> List<List<T>> partition(final List<T> list, final int size) {
if (list == null) {
throw new IllegalArgumentException("List must not be null");
}
if (size <= 0) {
throw new IllegalArgumentException("Size must be greater than 0");
}
List<List<T>> result = new ArrayList<>();
Iterator<T> it = list.iterator();
List<T> subList = null;
while (it.hasNext()) {
if (subList == null) {
subList = new ArrayList<>();
}
T t = it.next();
subList.add(t);
if (subList.size() == size) {
result.add(subList);
subList = null;
}
}
//补充最后一页
if (subList != null) {
result.add(subList);
}
return result;
}
具体业务数据:
List<CBMSBridgeInspectionRecordVo> recordVos = cbmsMapper.queryBridgePatrolRecords(query);
List<List<CBMSBridgeInspectionRecordVo>> groupList = partition(recordVos, 10000);
CountDownLatch countDownLatch = new CountDownLatch(groupList.size());
ExecutorService executorService = Executors.newFixedThreadPool(groupList.size());
for (int i = 0; i < groupList.size(); i++) {
int finalI = i;
executorService.execute(() -> {
//业务处理
//CbmsPushVo pushVo = generatePushVo(query);
// pushVo.setPatrolRecords(groupList.get(finalI));
// dailyInspectionFeign.pushDataBatch(pushVo).getData();
countDownLatch.countDown();
});
}
countDownLatch.await();
executorService.shutdown(); //关闭线程池