首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java8 CompletableFuture 用法全解

如果子线程执行异常了会导致主线程长期阻塞,这其实是错误的,子线程执行异常时其异常会被捕获,然后修改任务的状态为异常结束并唤醒等待的主线程,get方法判断任务状态发生变更,就终止等待了,并抛出异常,可参考《Java8...的result是回调方法的执行结果或者回调方法执行期间抛出的异常,与原始CompletableFuture的result无关了。...CompletableFuture实例的result不为null,则返回一个基于该result的新的CompletableFuture实例;如果该CompletableFuture实例为null,则,然后执行这个新任务...4、allOf / anyOf allOf返回的CompletableFuture是多个任务都执行完成后才会执行,只有有一个任务执行异常,则返回的CompletableFuture执行get...cf4=CompletableFuture.allOf(cf,cf2,cf3).whenComplete((a,b)->{ if(b!

1.5K31
您找到你想要的搜索结果了吗?
是的
没有找到

Java8 - 使用CompletableFuture 构建异步应用

---- 概述 为了展示 CompletableFuture 的强大特性, 创建一个名为 best-price-finder 的应用,它会查询多个在线商店,依据给定的产品或服务找出最低的价格。...在这段代码中,创建了一个代表异步计算的 CompletableFuture 对象实例,它在计算完成时会包含计算的结果。...当请求的产品价格最终计算得出时,你可以使用它的 complete 方法,结束completableFuture 对象的运行,并设置变量的值。...为了让客户端能了解商店无法提供请求商品价格的原因,你需要使用 CompletableFuture 的 completeExceptionally 方法将导致 CompletableFuture 内发生问题的异常抛出...代码如下 【抛出CompletableFuture内的异常】 ?

94120

Java8 - 使用工厂方法 supplyAsync创建 CompletableFuture

---- Pre Java8 - 使用CompletableFuture 构建异步应用 目前为止我们已经了解了如何通过编程创建 CompletableFuture 对象以及如何获取返回值,虽然看起来这些操作已经比较方便...,但还有进一步提升的空间, CompletableFuture 类自身提供了大量精巧的工厂方法,使用这些方法能更容易地完成整个流程,还不用担心实现的细节。...---- 使用工厂方法 supplyAsync创建 CompletableFuture 采用 supplyAsync 方法后,可以用一行代码重写getPriceAsync 方法。...,返回一个 CompletableFuture对象,该对象完成异步执行后会读取调用生产者方法的返回值。...> getPriceAsync(String product) { CompletableFuture futurePrice = new CompletableFuture();

76810

【小家java】Java8新特性之---CompletableFuture的系统讲解和实例演示(使用CompletableFuture构建异步应用)

JDK8引入中重磅类库:CompletableFuture Java8里面新增加了一个包含50个方法左右的类:CompletableFuture....使用案例 在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合....thenApply(i -> i.toString()); //System.out.println(f.get()); //"1000" } 我们会发现,结合Java8...的计算值,返回结果将是一个新的CompletableFuture,这个新的CompletableFuture会组合原来的CompletableFuture和函数返回的CompletableFuture。...比如有这样一个需求,将多个CompletableFuture组合成一个CompletableFuture,这个组合后的CompletableFuture的计算结果是个List,它包含前面所有的CompletableFuture

2.6K41

Java8已经发布7年了,不会还有人没用过CompletableFuture

但是当你用过CompletableFuture之后,就会发现以前的线程池处理任务有多难用,功能有多简陋,CompletableFuture又是多么简洁优雅。...要知道CompletableFuture已经随着Java8发布7年了,还没有过它就有点说不过去了。今天5分钟带你深入浅出CompletableFuture实用教程。1....使用CompletableFuture重构任务处理看一下使用CompletableFuture改造后代码:/** * @author yideng * @apiNote CompletableFuture...十年前可以这样写,Java8都已经发布7年了,你还不会用Java8的写法?...别瞎想了,你写的肯定没有CompletableFuture好用,看一下CompletableFuture是怎么用的:/** * @author yideng * @apiNote CompletableFuture

47210
领券