1. CompletableFuture类
CompletableFuture 类是 Java 中用于异步编程的一个重要工具。它提供了一种简单且灵活的方式来处理异步操作的结果。
CompletableFuture 允许你在一个线程中执行异步操作,并在另一个线程中处理操作的结果。你可以通过 CompletableFuture.supplyAsync()。
你可以将多个 CompletableFuture 实例组合在一起以执行复杂的操作流。通过使用 thenApply(), thenAccept(), thenCombine() 等方法,你可以在一个 CompletableFuture 完成后执行另一个操作,或者在多个 CompletableFuture 完成后执行组合操作。
2. 使用实例
先定义一个方法
/**
* 异步获取数据
*
* @param supplier 提供这
*/
private <T> CompletableFuture<T> xxxCompletableFuture(Supplier<T> supplier) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return CompletableFuture.supplyAsync(() -> {
RequestContextHolder.setRequestAttributes(servletRequestAttributes);
return supplier.get();
}, xxxExecutor);
}
在这里插入代码片
具体使用
//多线程获取A数据、B数据、C数据
CompletableFuture<List<AAADTO>> aaaFuture = xxxCompletableFuture(() -> Service.getAAAList(queryDTO.getUnitId(), ids, startTime, endTime));
CompletableFuture<List<BBBDTO>> bbbFuture = xxxCompletableFuture(() -> Service.getBBBList(queryDTO.getUnitId(), ids, startTime, endTime));
CompletableFuture<List<CCCDTO>> cccFuture = xxxCompletableFuture(() -> Service.getCCCList(queryDTO.getUnitId(), ids, startTime, endTime));
CompletableFuture.allOf(aaaFuture, bbbFuture, cccFuture)
.thenApply(r -> {
aaaList.addAll(aaaFuture.join());
bbbList.addAll(bbbFuture.join());
cccList.addAll(cccFuture.join());
return null;
}).join();