CompletableFuture异步编排(多任务组合)

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CompletableFuture异步编排(多任务组合)相关的知识,希望对你有一定的参考价值。

目录

一、CompletableFuture源码中多任务组合的相关方法

  • CompletableFuture源码中多任务组合的相关方法

二、allOf方法代码示例

  • allOf方法:等待所有任务完成。

  • 代码示例

    package com.xz.thread.day1;
    import lombok.SneakyThrows;
    import java.util.concurrent.*;
    /**
     * @description: 多任务组合
     *                  allOf:等待所有任务完成
     * @author: xz
     * @create: 2022-08-23
     */
    public class Test17 
        /**
         * 定义线程池
         */
        public static ExecutorService service = Executors.newFixedThreadPool(3);
    
        @SneakyThrows
        public static void main(String[] args)
            System.out.println("main start ...");
    
            CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> 
                System.out.println("开启异步任务1...");
                return "hello world 1";
            , service);
    
            CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> 
                System.out.println("开启异步任务2...");
                return "hello world 2";
            , service);
    
            CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> 
                System.out.println("开启异步任务3...");
                return "hello world 3";
            , service);
    
            CompletableFuture<Void> future = CompletableFuture.allOf(future1, future2, future3);
            future.get();//等待索引结果完成
    
            System.out.println("main end ...");
        
    
    
  • 输出结果

  • 注:如果不使用future.get()阻塞,若其中一个任务执行时间较长,则可能会丢失任务信息。

三、anyOf方法代码示例

  • anyOf:方法:只要有一个任务完成

  • 代码示例

    package com.xz.thread.day1;
    
    import lombok.SneakyThrows;
    import java.util.concurrent.*;
    /**
     * @description: 多任务组合
     *          anyOf: 只要有一个任务完成
     * @author: xz
     * @create: 2022-08-23
     */
    public class Test18 
        /**
         * 定义线程池
         */
        public static ExecutorService service = Executors.newFixedThreadPool(5);
    
        @SneakyThrows
        public static void main(String[] args)
            System.out.println("main start ...");
    
            CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> 
                System.out.println("开启异步任务1...");
                return "hello world 1";
            , service);
    
            CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> 
                try 
                    Thread.sleep(500);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
                System.out.println("开启异步任务2...");
                return "hello world 2";
            , service);
    
            CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> 
                try 
                    Thread.sleep(1000);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
                System.out.println("开启异步任务3...");
                return "hello world 3";
            , service);
    
            CompletableFuture<Object> objectCompletableFuture = CompletableFuture.anyOf(future1, future2, future3);
            objectCompletableFuture.get();//等待索引结果完成
    
            System.out.println("main end ...");
        
    
    
  • 输出结果

以上是关于CompletableFuture异步编排(多任务组合)的主要内容,如果未能解决你的问题,请参考以下文章

CompletableFuture异步编排(多任务组合)

CompletableFuture 异步编排

CompletableFuture异步编排(两任务组合——其中一个任务执行)

CompletableFuture异步编排(两任务组合——其中一个任务执行)

CompletableFuture异步编排(两任务组合——其中一个任务执行)

CompletableFuture异步编排(两任务组合——两个任务必须都完成才触发另一个任务 )