java多线程实战二:CompletableFuture异步任务实现
CompletableFuture异步任务通过supplyAsync函数,支持返回数据。
主线程中pageCompletableFuture.get()非阻塞主线程,等待异步任务返回数据。
supplyAsync() 以Supplier函数式接口类型为参数,返回结果类型为U;Supplier接口的 get()是有返回值的,调用时会阻塞主线程。这里为了简单,直接顺序执行,没有join并行返回结果。
CompletableFuture默认线程池是ForkJoinPool.commonPool(),但为了实现线程之间互不影响,且便于定位问题,强烈推荐自定义线程池。
核心代码
public StudentPageVO listByParams(StudentVO studentVO, Query query) {
QueryWrapper<Student> queryWrapper = listQuryWrapperByParams(studentVO);
QueryWrapper<Student> sumQueryWrapper = listQuryWrapperByParams(studentVO);
//将RequestAttributes对象设置为子线程共享
ServletRequestAttributes servletRequestAttributes = (Servle