使用thenCombine , 合并再个不相干的 CompletableFuture 对象
CompletableFuturefuture = CompletableFuture.supplyAsync(FutureTest::getOrderCount) .thenCombine(CompletableFuture.supplyAsync(FutureTest::getOrderCount), (arg1, arg2) -> arg1 + arg2);
以上操作是先异步获取一个订单个数量 ,再异步获取另一个订单数量。然后再个再将两个订单数量再进行求和
使用 thenAccept 处理异步的结果
Stream> futureStream = IntStream.range(0, 10) .mapToObj(i -> CompletableFuture.supplyAsync(FutureTest::getOrderCount)); CompletableFuture[] blankFuture = futureStream .map(item -> item.thenAccept(System.out::println)) .toArray(CompletableFuture[]::new);
allOf anyOf 处理多个Future
//在这里等待所有的线程结束CompletableFuture.allOf(blankFuture).join();//如果你只需要其中一个线程有返回就行,那么可以使用 anyOf 如:Object result = CompletableFuture.anyOf(blankFuture).join();
所有代码:
package com.example.demo.future;import java.util.List;import java.util.concurrent.CompletableFuture;import java.util.stream.Collectors;import java.util.stream.IntStream;import java.util.stream.Stream;public class FutureTest { /** * 获取门店id * * @return */ private static Long getOrderCount() { long id = Math.round(Math.random() * 10); try { Thread.sleep(id * 1000); //拟处理远程处理时间 } catch (InterruptedException e) { e.printStackTrace(); } return id; } public static void main(String[] args) { //使用thenCombine , 合并再个不相干的 CompletableFuture 对象 CompletableFuturefuture = CompletableFuture.supplyAsync(FutureTest::getOrderCount) .thenCombine(CompletableFuture.supplyAsync(FutureTest::getOrderCount), (arg1, arg2) -> arg1 + arg2); //以上操作是先异步获取一个订单个数量 ,再异步获取另一个订单数量。然后再个再将两个订单数量再进行求和 //使用 thenAccept 处理异步的结果 Stream > futureStream = IntStream.range(0, 10) .mapToObj(i -> CompletableFuture.supplyAsync(FutureTest::getOrderCount)); CompletableFuture[] blankFuture = futureStream .map(item -> item.thenAccept(System.out::println)) .toArray(CompletableFuture[]::new); //在这里等待所有的线程结束 CompletableFuture.allOf(blankFuture).join(); //如果你只需要其中一个线程有返回就行,那么可以使用 anyOf 如: Object result = CompletableFuture.anyOf(blankFuture).join(); System.out.println("end ..."); }}