java8并发编程实战-part2

本文探讨了Java 8的并发编程,重点是CompletableFuture的使用,包括acceptEither方法及其Async变种,applyToEither方法在有依赖和无依赖情况下的应用,以及如何合并多个CompletableFuture。此外,还讲解了异常处理的策略,如exceptionally和handle方法。
摘要由CSDN通过智能技术生成

技术版本

jdk: 1.8

网上帖子千千万,咱也一起炒冷饭.
闲言少叙 书接上文

案例开始

accept和apply系列方法补充

  1. acceptEither方法, 先执行完的任务被返回, 然后Consumer的入参就是先返回的任务的数据,但是2个任务都执行了

@Test
public void thenAcceptEitherTest() {
    CompletableFuture.supplyAsync(() -> ProductService.Instance.getProduct(12))
            .acceptEither(CompletableFuture.supplyAsync(() -> ProductService.Instance.getProduct(15)),
                    p -> MixAll.printWithThread(" product:" + p.getName() + " returned..."));

    //等待执行完成
    MixAll.simulateComputeCost(5);
}

该方法同时包括2个带Async后缀的重载方法
2.applyToEither方法,

合并2个CompletableFuture

1.假如要先获取产生信息,拿到数据后在获取对应的商户信息,这种是存在依赖关系的情况

@Test
public void combineFutureTest() {
    CompletableFuture<Merchant> cf = CompletableFuture
            .supplyAsync(() -> ProductService.Instance.getProduct(12)) //step1
            .thenCompose(product -> CompletableFuture.supplyAsync(() -> MerchantService.Instance.getMerchant(product))); //step2

    
}

在step1处返回的是CompletableFuture, thenCompose的入参是个Function<? super T, ? extends CompletionStage> fn, 注意返回值是CompletionStage的子类,
所以在step2处转成了CompletableFuture

2.有2个互相独立的计算, 等他们都完成后在合并做一些计算的情况

@Test
public void combineFutureTest2() throws ExecutionException, InterruptedException {
    C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值