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异步编排(两任务组合——其中一个任务执行)