总结:在每页都用一个线程,或者一个接口使用多线程,
需要注意:1. 第一页数据处理完后,再查询第二页数据时,第二页数据,不是第一页查询的那个第二页。
代码:
这个是每页一个线程
public static AtomicInteger pageNum = new AtomicInteger(0);
public static int getPageNum() {
return pageNum.incrementAndGet();
}
/**
* 将已推送的、已经删除的、隐藏课程,撤销回来
*/
public void handBatchUnpush(int pageSize) {
//保证每次调用都是从第一页开始
pageNum = new AtomicInteger(0);
//一次批量处理,同时起用三个线程
for (int i = 0; i <3; i++) {
handBatchUnpushthread(pageSize);
}
}
private void handBatchUnpushthread(int pageSize) {
new Thread(()->{
try {
int pageNum = getPageNum();
PageHelper.startPage(pageNum, pageSize);
List<SearchPushRecord> list = searchPushRecordMapper.selectPushedAndIsdeletedAndHidedCourses();
PageInfo<SearchPushRecord> pageInfo = new PageInfo<>(list);
log.info("【执行撤销 启动线程 {} 当前页 {} 当前页大小 {} 数据量 {} 】", Thread.currentThread().getName(), pageNum, pageSize, CollectionUtils.isEmpty(list)? 0:list.size());
unpush(list,"ALBUM", 0);
while (pageInfo.isHasNextPage()){
handBatchUnpushthread(pageSize);
log.info("【执行撤销 启动线程 {} 当前页 {} 当前页大小 {} 数据量 {} 】", Thread.currentThread().getName(), pageNum, pageSize, CollectionUtils.isEmpty(list)? 0:list.size());
}
} catch (Exception e) {
log.error("【批量撤销失败】", e);
//operationLogService.saveException(e, pageNum.get(), pageSize, "SearchPushRecordService.handBatchUnpushthread", "批量撤销失败");
}
}).start();
}
如果是要改成这个接口,只启动三个线程,那就不要递归
public static AtomicInteger pageNum = new AtomicInteger(0);
public static int getPageNum() {
return pageNum.incrementAndGet();
}
/**
* 将已推送的、已经删除的、隐藏课程,撤销回来
*/
public void handBatchUnpush(int pageSize) {
//保证每次调用都是从第一页开始
pageNum = new AtomicInteger(0);
//一次批量处理,同时起用三个线程
for (int i = 0; i <3; i++) {
handBatchUnpushthread(pageSize);
}
}
private void handBatchUnpushthread(int pageSize) {
new Thread(()->{
try {
int pageNum = getPageNum();
PageHelper.startPage(pageNum, pageSize);
List<SearchPushRecord> list = searchPushRecordMapper.selectPushedAndIsdeletedAndHidedCourses();
PageInfo<SearchPushRecord> pageInfo = new PageInfo<>(list);
log.info("【执行撤销 启动线程 {} 当前页 {} 当前页大小 {} 数据量 {} 】", Thread.currentThread().getName(), pageNum, pageSize, CollectionUtils.isEmpty(list)? 0:list.size());
unpush(list,"ALBUM", 0);
while (pageInfo.isHasNextPage()){
pageNum = getPageNum();
PageHelper.startPage(pageNum, pageSize);
list = searchPushRecordMapper.selectPushedAndIsdeletedAndHidedCourses();
pageInfo = new PageInfo<>(list);
log.info("【执行撤销 启动线程 {} 当前页 {} 当前页大小 {} 数据量 {} 】", Thread.currentThread().getName(), pageNum, pageSize, CollectionUtils.isEmpty(list)? 0:list.size());
unpush(list,"ALBUM", 0);
}
} catch (Exception e) {
log.error("【批量撤销失败】", e);
//operationLogService.saveException(e, pageNum.get(), pageSize, "SearchPushRecordService.handBatchUnpushthread", "批量撤销失败");
}
}).start();
}