您当前的位置: 首页 > 

小志的博客

暂无认证

  • 1浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

小志的博客 发布时间:2022-08-23 23:37:18 ,浏览量:1

目录
    • 一、CompletableFuture源码中多任务组合的相关方法
    • 二、allOf方法代码示例
    • 三、anyOf方法代码示例

一、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 future1 = CompletableFuture.supplyAsync(() -> {
                System.out.println("开启异步任务1...");
                return "hello world 1";
            }, service);
    
            CompletableFuture future2 = CompletableFuture.supplyAsync(() -> {
                System.out.println("开启异步任务2...");
                return "hello world 2";
            }, service);
    
            CompletableFuture future3 = CompletableFuture.supplyAsync(() -> {
                System.out.println("开启异步任务3...");
                return "hello world 3";
            }, service);
    
            CompletableFuture 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 future1 = CompletableFuture.supplyAsync(() -> {
                System.out.println("开启异步任务1...");
                return "hello world 1";
            }, service);
    
            CompletableFuture future2 = CompletableFuture.supplyAsync(() -> {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("开启异步任务2...");
                return "hello world 2";
            }, service);
    
            CompletableFuture future3 = CompletableFuture.supplyAsync(() -> {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("开启异步任务3...");
                return "hello world 3";
            }, service);
    
            CompletableFuture objectCompletableFuture = CompletableFuture.anyOf(future1, future2, future3);
            objectCompletableFuture.get();//等待索引结果完成
    
            System.out.println("main end ...");
        }
    }
    
  • 输出结果 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.6048s