CompletableFuture的thenCombine结果组合用法实例

本文详细介绍了CompletableFuture的thenCombine方法在Java中的使用,通过实例展示如何结合线程池管理多个异步任务的结果,以提高性能并避免线程饥饿问题。作者强调了根据业务类型创建不同线程池的重要性。

CompletableFuture的thenCombine结果组合用法实例

thenCombine 方法,合并两个线程任务的结果,并进一步处理。有种大数的MapReduce的思想。
在这里插入图片描述

举例:

    @Autowired
    @Qualifier(ThreadPoolConfig.IMPORT_EXECUTOR)
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;

定义线程池。并在CompletableFuture中指定线程池。也可以不指定线程池,没有指定Executor的方法会使用ForkJoinPool.commonPool() 作为它的线程池执行异步代码。如果指定线程池,则使用指定的线程池运行。

如果所有 CompletableFuture 共享一个线程池,那么一旦有任务执行一些很慢的 I/O 操作,就会导致线程池中所有线程都阻塞在 I/O 操作上,从而造成线程饥饿,进而影响整个系统的性能。所以,建议根据不同的业务类型创建不同的线程池,以避免互相干扰

1. demo

public List<Object> queryRecentOrders(String custNo) {
   
   
        CompletableFuture<List<Integer>> future1 = CompletableFuture
                .supplyAsync(() -> {
   
   
                    int number = 1;
                    List<Integer> integers = Lists.newArrayList(number);
                    System.out.println("first:" + integers);
                    return integers;
                }, threadPoolTaskExecutor);

        CompletableFuture<List<Integer>> future2 = CompletableFuture
                .supplyAsync(new Supplier<List<Integer>>() {
   
   
                    @Override
                    public List<Integer> get() {
   
   
                        int number = 2;
                        List<Integer> integers = Lists.newArrayList(number);
                        System.out.println("second:" + integers);
                        return integers;
                    }
                }, threadPoolTaskExecutor);

        CompletableFuture<List<Integer>> future3 = CompletableFuture
                .supplyAsync(new Supplier<List<Integer>>() {
   
   
                    @Override
                    public List<Integer> get() {
   
   
                        int number = 3;
                        List<Integer> integers = Lists.newArrayList(number);
                        System.out.println("third:" + integers);
                        return integers;
                    }
                }, threadPoolTaskExecutor);

        CompletableFuture<Integer> result = future1
                .thenCombine(future2, (x, y) -> {
   
   
                    System.err.println("x:" + x);
                    System.err.println("y:" + y);
                    Integer sum = Lists.newArrayList(x, y).stream().flatMap(k ->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值