目录
一、CompletableFuture源码中多任务组合的相关方法
- 一、CompletableFuture源码中多任务组合的相关方法
- 二、allOf方法代码示例
- 三、anyOf方法代码示例
- CompletableFuture源码中多任务组合的相关方法
-
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:方法:只要有一个任务完成
-
代码示例
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 ..."); } }
-
输出结果