java 8 CompletableFuture (3)

使用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 ...");

    }
}
相关文章
相关标签/搜索