异步回调:CompletableFuture

异步回调:CompletableFuture

Future设计的初衷,对将来的某个事件的结果进行建模

CompletableFuture

public class CompletableFuture<T>
extends Object
implements Future<T>, CompletionStage<T>

Future可以明确地完成(设定其值和状态),并且可以被用作CompletionStage ,支持有关的功能和它的完成时触发动作。
当两个或多个线程试图complete , completeExceptionally ,或cancel一个CompletableFuture,只有一个成功。

除了直接操作状态和结果的这些和相关方法外,CompletableFuture还实现了接口CompletionStage ,具有以下策略

  • 为异步方法的依赖完成提供的操作可以由完成当前CompletableFuture的线程或完成方法的任何其他调用者执行。
  • 所有不使用显式Executor参数的异步方法都使用ForkJoinPool.commonPool()执行 (除非它不支持至少两个并行级别,在这种情况下,使用新的线程)。 为了简化监视,调试和跟踪,所有生成的异步任务都是标记接口CompletableFuture.AsynchronousCompletionTask的实例 。
  • 所有CompletionStage方法都是独立于其他公共方法实现的,因此一个方法的行为不会受到子类中其他方法的覆盖的影响。

CompletableFuture还实施Future ,具有以下政策:

  • 由于(不同于FutureTask ),这个类不能直接控制导致其完成的计算,所以取消被视为另一种形式的异常完成。 方法cancel具有相同的效果completeExceptionally(new CancellationException()) 。 方法isCompletedExceptionally()可用于确定CompletableFuture是否以任何特殊方式完成。
  • 如果使用CompletionException异常完成,方法get()和get(long, TimeUnit)将抛出与对应的CompletionException中保持的相同原因的ExecutionException。 为了简化大多数情况下的使用,此类还定义了方法join()和getNow(T) ,而是在这些情况下直接抛出CompletionException。
    从以下版本开始:1.8
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`CompletableFuture` 提供了几种用于处理异步操作完成后的回调方法: ### 1. `thenAccept` 当异步操作完成后,此方法会被调用,它接收一个参数并执行相应操作。 ```java CompletableFuture.supplyAsync(() -> "Hello").thenAccept(result -> System.out.println(result)); ``` ### 2. `thenApply` 类似于 `thenAccept`,但它还接受一个转换函数作为参数,用于在回调时转换结果。 ```java CompletableFuture.supplyAsync(() -> "Hello").thenApply(str -> str.toUpperCase()).thenAccept(System.out::println); ``` ### 3. `thenCombine` 此方法允许您将两个 `CompletableFuture` 结果合并成一个新的 `CompletableFuture` 并执行回调。 ```java CompletableFuture<String> future1 = CompletableFuture.completedFuture("A"); CompletableFuture<String> future2 = CompletableFuture.completedFuture("B"); future1.thenCombine(future2, (a, b) -> a + b).thenAccept(System.out::println); // 输出 "AB" ``` ### 4. `thenRun` 与 `thenAccept` 类似,但不返回结果,主要用于执行某些操作。 ```java CompletableFuture.runAsync(() -> { System.out.println("Doing something..."); }); ``` ### 5. `whenComplete` 当异步操作完成时,此方法会被调用,并可以接收一个处理异常的方法以及另一个可选的操作方法。 ```java CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Oops!"); }).whenComplete((result, ex) -> { if (ex != null) { System.err.println(ex.getMessage()); } }); ``` 这些回调方法可以帮助您更好地组织和管理异步操作的结果和错误处理流程。每个方法都有特定的应用场景,选择合适的回调可以根据您的具体需求优化代码结构和逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值