博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 8 CompletableFuture (3)
阅读量:6670 次
发布时间:2019-06-25

本文共 2424 字,大约阅读时间需要 8 分钟。

hot3.png

使用thenCombine , 合并再个不相干的 CompletableFuture 对象          

 

CompletableFuture
future = 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 对象        CompletableFuture
future = 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 ..."); }}

 

 

转载于:https://my.oschina.net/u/2552286/blog/1874795

你可能感兴趣的文章