CompletableFuture踩坑记

本文详细介绍了在使用Java CompletableFuture时遇到的问题及解决方案,包括异步任务创建、结果处理、转换方法、allOf和anyOf的使用,以及如何避免回调方法未执行的陷阱。通过实例分析和最佳实践,帮助理解CompletableFuture的强大功能。
摘要由CSDN通过智能技术生成

使用CompletableFuture踩的坑

坑才是重点,所以放在最前面阐述,希望能给大家解决问题提供一点帮助。

  1. 现象

通过CompletabltableFuture异步执行任务,并通过其whenComplete方法设置异步回调后,在回调方法中将值插入list或map中,结果发现获取不到回调方法中的值

public class CompletableFutureDemo02 {
   

   /*
   * 执行结果:data={}
   * */
   public static void main(String[] args) throws Exception {
   
       Map<String, Integer> data = getData();
       System.out.println("data=" + data);
   }

   /*
   * 异步执行一系列耗时任务
   * */
   private static Map<String, Integer> getData() {
   
       List<String> data = Arrays.asList("zhangsan", "lisi", "wangwu", "我是中国人");

       Map<String, Integer> results = new HashMap<>();
       List<CompletableFuture<Integer>> futures = new ArrayList<>();

       data.forEach(name -> {
   
           CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> getLength(name));
           // 设置回调
           future.whenComplete((result, throwable) -> {
   
               try {
   
                   // 回调方法执行逻辑消耗时间
                   Thread.sleep(10);
               } catch (InterruptedException e) {
   
                   e.printStackTrace();
               }

               
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值