大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
使用forkjoin框架分页查询所有数据的例子
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
@RestController
@RequestMapping("/test2")
@PropertySource("classpath:/application.properties")
@Slf4j
public class ForkJoinPollController {
@Autowired
private SyncPersonInfoServiceImp syncPersonInfoService;
@ApiOperation("测试forkJoinPoll")
@GetMapping("/forkJoinPoll")
public void forkJoinPoll(){
log.info("forkJoinPoll start...");
ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() * 2);
// 总页数,提前查询出来,数据量不大就不用拆任务
int total = syncPersonInfoService.getTotal();
int totalPage = (int)Math.ceil(total * 1.0 / IrdsConstant.PAGE_SIZE_MAX);
SumTask innerFind = new SumTask(1, totalPage);
pool.invoke(innerFind);
List<VChrHkws> join = innerFind.join();
pool.shutdown();
log.info("forkJoinPoll end,size={}",join.size());
}
@AllArgsConstructor
public class SumTask extends RecursiveTask<List<VChrHkws>> {
private final Integer fromIndex;
private final Integer toIndex;
@Override
protected List<VChrHkws> compute() {
// 如果任务足够小就触发任务
if (toIndex - fromIndex < 2) {
List<VChrHkws> list = new ArrayList<>();
for (int pageNo = fromIndex; pageNo <= toIndex; pageNo++) {
ApiPageListData<VChrHkws> pageData = syncPersonInfoService.getPageListData(pageNo, IrdsConstant.PAGE_SIZE_MAX);
// 查询数据库返回值
list.addAll(pageData.getList());
}
return list;
} else {
// 如果任务大于阈值,就分裂成两个子任务计算
int mid = (fromIndex + toIndex) / 2;
SumTask left = new SumTask(fromIndex, mid);
SumTask right = new SumTask(mid + 1, toIndex);
invokeAll(left, right);
List<VChrHkws> join = left.join();
join.addAll(right.join());
return join;
}
}
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193232.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...