多线程并发工具类05- CompletableFuture异步化任务处理
参考博客:蟹粉小笼包https://www.cnblogs.com/aalex/p/8480112.html
[美团技术团队文章]('https://tech.meituan.com/2022/05/12/principles-and-practices-of-completablefuture.html')
蟹粉小笼包 讲了使用场景和API,我就不CV了。
我遇到的使用场景,对接企微的客户appId变更了,对应的用户的openId都要同步成最新的数据,大概有70多万条数据,这种情况下,就考虑到使用了CompletableFuture;
使用到的多任务并行处理
CompletableFuture<String> findAccount(String accountId) {
return CompletableFuture.supplyAsync(() -> {
// mock finding account from database
return "account" + accountId;
});
}
public void batchProcess(List<String> accountIdList) {
// 并行根据accountId查找对应account
List<CompletableFuture<String>> accountFindingFutureList =
accountIdList.stream().map(accountId -> findAccount(accountId)).collect(Collectors.toList());
// 使用allOf方法来表示所有的并行任务
CompletableFuture<Void> allFutures =
CompletableFuture
.allOf(accountFindingFutureList.toArray(new CompletableFuture[accountFindingFutureList.size()]));
// 下面的方法可以帮助我们获得所有子任务的处理结果
CompletableFuture<List<String>> finalResults = allFutures.thenApply(v -> {
return accountFindingFutureList.stream().map(accountFindingFuture -> accountFindingFuture.join())
.collect(Collectors.toList());
});
}

浙公网安备 33010602011771号