CompletableFuture 异步调用,获取返回值

复制代码
 ExecutorService executor = new ThreadPoolExecutor(
                8, 16, 60,
                TimeUnit.MINUTES,
                new ArrayBlockingQueue<>(100)
        );

        Random random=new Random(10);
        //模拟查询用户列表
        List<User> list=selectUsers();//需要执行的任务列表

        // 任务列表
        List<CompletableFuture<User>> fList = new ArrayList<>();
        list.forEach(u->{
            CompletableFuture<User> f = CompletableFuture.supplyAsync(//异步执行方法
                    //执行耗时较长的业务代码,这里模拟一下
                    ()->{
                        //执行完成,设置返回结果 设置 coede 和 list
                        u.setAge(random.nextInt(100));
                        u.setName(UUID.randomUUID().toString());
                        return u;
                    },
                    executor
            );
            fList.add(f);
        });


        // 阻塞,等待所有任务执行完成
        CompletableFuture<Void> all= CompletableFuture.allOf(fList.toArray(new CompletableFuture[0]));

        //因为allOf没有返回值,所以需要通过thenApply回调函数获取结果
        CompletableFuture<List<User>> allUser=all.thenApply(v-> fList.stream().map(a-> {
            try {
                return a.get();
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
            return null;
        }).collect(Collectors.toList()));
//        ---------------获取返回值-----------------

        try {
            list=allUser.get();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } catch (ExecutionException e) {
            throw new RuntimeException(e);
        }
相关推荐
ღ᭄陽先生꧔ꦿ᭄16 分钟前
Java异常架构与异常关键字
java·开发语言·架构
繁依Fanyi23 分钟前
【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`
java·大数据·开发语言
年轻的高血压患者33 分钟前
Java servlet《网吧机房管理系统浅析》
java·mysql·servlet·eclipse·idea
远望樱花兔1 小时前
【d46】【Java】【力扣】876.链表的中间结点
java·leetcode
严文文-Chris1 小时前
【设计模式-备忘录】
java·设计模式
码上一元1 小时前
【百日算法计划】:每日一题,见证成长(019)
java·数据结构·算法
shiming88791 小时前
在IntelliJ IDEA中创建一个HTML项目
java·html·intellij-idea
xcLeigh1 小时前
html实现好看的多种风格手风琴折叠菜单效果合集(附源码)
android·java·html
一丝晨光1 小时前
语言的循环语句
java·c++·python·c#·c·fortran·algol