Java 8 CompletableFuture 学习及实践笔记

CompletableFuture 学习及实践笔记

CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它提供了一种简洁而灵活的方式来处理异步操作和构建复杂的异步流程。

创建 CompletableFuture

使用 CompletableFuture.supplyAsync(Supplier<U> supplier) 方法创建一个 CompletableFuture,该方法会异步执行提供的 Supplier 函数,并返回一个 CompletableFuture 对象。

使用 CompletableFuture.runAsync(Runnable runnable) 方法创建一个 CompletableFuture,该方法会异步执行提供的 Runnable 函数,并返回一个 CompletableFuture 对象。

异步操作和回调

使用 thenApply(Function<? super T,? extends U> function) 方法可以在 CompletableFuture 中注册一个转换函数,当 CompletableFuture 完成时,将触发该函数,并将结果传递给下一个 CompletableFuture。

使用 thenAccept(Consumer<? super T> action) 方法可以注册一个消费者函数,当 CompletableFuture 完成时,将触发该函数,并处理结果。

使用 thenRun(Runnable action) 方法可以注册一个 Runnable 函数,当 CompletableFuture 完成时,将触发该函数,不接收任何输入。

异常处理

使用 exceptionally(Function<Throwable,? extends T> exceptionFunction) 方法可以注册一个异常处理函数,当 CompletableFuture 发生异常时,将触发该函数,并返回一个备选结果。

使用 handle(BiFunction<? super T,Throwable,? extends U> handler) 方法可以注册一个处理函数,当 CompletableFuture 完成时,无论是正常结果还是异常结果,都会触发该函数。

组合多个 CompletableFuture

使用 thenCompose(Function<? super T, ? extends CompletionStage<U>> fn) 方法可以将两个 CompletableFuture 链接起来,当第一个 CompletableFuture 完成时,将触发提供的函数,并返回一个新的 CompletableFuture 对象。

使用 thenCombine(CompletionStage<? extends U> other, BiFunction<? super T,? super U,? extends V> fn) 方法可以组合两个 CompletableFuture 的结果,并在两者都完成时触发提供的函数。

使用 allOf(CompletableFuture<?>... cfs) 方法可以等待多个 CompletableFuture 都完成后再执行某个操作。

等待 CompletableFuture 完成

使用 get() 方法可以阻塞当前线程,直到 CompletableFuture 完成,并获取 CompletableFuture 的结果。

使用 join() 方法可以等待 CompletableFuture 完成,并获取 CompletableFuture 的结果,但不会抛出 checked 异常。

超时处理

使用 completeOnTimeout(T value, long timeout, TimeUnit unit) 方法可以设置 CompletableFuture 在指定的时间内完成,如果超过指定时间仍未完成,将使用提供的默认值进行完成。

使用 orTimeout(long timeout, TimeUnit unit) 方法可以设置 CompletableFuture 在指定的时间内完成,如果超过指定时间仍未完成,将抛出 TimeoutException。

通过学习 CompletableFuture,你可以更好地处理异步操作和复杂的异步流程,提高代码的性能和可读性。它提供了更加灵活和简洁的编程方式,使得异步编程变得更加容易和优雅。

实战

将四个线程并发执行,最后汇总执行结果
在这里插入图片描述
最后使用get()方法获取各线程执行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值