使用线程池明显提高查询效率.
示例代码如下:
@PostMapping("/list2")
@ApiOperation("使用线程池查询---学生和用户列表")
public ResponseResult<UserVO> listForUserVO2() throws ExecutionException, InterruptedException {
// 1. 创建线程池对象
ThreadPoolExecutor executor = new ThreadPoolExecutor(
5,
10,
15,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(5),
new ThreadPoolExecutor.CallerRunsPolicy()
);
long start = System.currentTimeMillis();
UserVO userVO = new UserVO();
// 2. 异步执行
CompletableFuture<Void> userFuture = CompletableFuture.runAsync(() -> {
// 查询用户
List<BaseUser> baseUserList = baseUserService.list();
userVO.setUserList(baseUserList);
userVO.setUserCount(baseUserList.size());
}, executor);
CompletableFuture<Void> stuFuture = CompletableFuture.runAsync(() -> {
// 查询学生
List<BaseStudent> studentList = baseStudentService.list();
userVO.setStudentList(studentList);
userVO.setStuCount(studentList.size());
}, executor);
// 3. 等待完成
CompletableFuture.allOf(userFuture, stuFuture).get();
long end = System.currentTimeMillis();
long time = end - start;
System.out.println(">>>>>>>>>>>>>>>>>>>>>> 查询耗时: " + time);
// 4. 关闭线程池
executor.shutdown();
return ResponseResult.success(userVO);
}