使用thenCombine , 合并再个不相干的 CompletableFuture 对象 java
CompletableFuture<Long> future = CompletableFuture.supplyAsync(FutureTest::getOrderCount) .thenCombine(CompletableFuture.supplyAsync(FutureTest::getOrderCount), (arg1, arg2) -> arg1 + arg2);
以上操做是先异步获取一个订单个数量 ,再异步获取另外一个订单数量。而后再个再将两个订单数量再进行求和
dom
使用 thenAccept 处理异步的结果异步
Stream<CompletableFuture<Long>> 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();
全部代码:code
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 对象 CompletableFuture<Long> future = CompletableFuture.supplyAsync(FutureTest::getOrderCount) .thenCombine(CompletableFuture.supplyAsync(FutureTest::getOrderCount), (arg1, arg2) -> arg1 + arg2); //以上操做是先异步获取一个订单个数量 ,再异步获取另外一个订单数量。而后再个再将两个订单数量再进行求和 //使用 thenAccept 处理异步的结果 Stream<CompletableFuture<Long>> 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 ..."); } }