Java8 CompletableFuture 异步编程
本节内容❑ 创建异步计算,并获取计算结果】❑ 使用非阻塞操作提升吞吐量❑ 设计和实现异步API❑ 如何以异步的方式使用同步的API❑ 如何对两个或多个异步操作进行流水线和合并操作❑ 如何处理异步操作的完成状态...
实现目标
- 理解各种异步类的使用模式,并熟练使用这些类。
- 熟悉需要的一些线程的调用模式
学习
1. 构造函数 supplyAsync 和 runAsync 的区别
supplyAsync表示创建带返回值的异步任务的,相当于ExecutorService submit(Callable task) 方法,runAsync表示创建无返回值的异步任务,相当于ExecutorService submit(Runnable task)方法,这两方法的效果跟submit是一样的,两个方法各重载了一个可置入
以下为回调函数
2. thenApply / thenApplyAsync 异步回调
前者是由执行job1的线程立即执行job2,即两个job都是同一个线程执行的
后者是将job2提交到线程池中异步执行,实际执行job2的线程可能是另外一个线程
3. thenAccept / thenRun
thenAccept 同 thenApply 接收上一个任务的返回值作为参数,但是无返回值;
thenRun 的方法没有入参,也买有返回值,测试用例如下:
4. exceptionally whenComplete handle
whenComplete 未发生异常正常返回值发生异常就返回异常
exceptionally确认会发生异常
handle 基本一致 区别在于 handle 有返回值
以下是组合处理
7 thenCombine / thenAcceptBoth / runAfterBoth
这三个方法都是将两个CompletableFuture组合起来,只有这两个都正常执行完了才会执行某个任务,区别在于,thenCombine会将两个任务的执行结果作为方法入参传递到指定方法中,且该方法有返回值;thenAcceptBoth同样将两个任务的执行结果作为方法入参,但是无返回值;runAfterBoth没有入参,也没有返回值。注意两个任务中只要有一个执行异常,则将该异常信息作为指定任务的执行结果。
8 applyToEither / acceptEither / runAfterEither
三个方法都是将两个CompletableFuture组合起来,只要其中一个执行完了就会执行某个任务,其区别在于applyToEither会将已经执行完成的任务的执行结果作为方法入参,并有返回值;acceptEither同样将已经执行完成的任务的执行结果作为方法入参,但是没有返回值;runAfterEither没有方法入参,也没有返回值。注意两个任务中只要有一个执行异常,则将该异常信息作为指定任务的执行结果。
9. thenCompose
thenCompose方法会在某个任务执行完成后,将该任务的执行结果作为方法入参然后执行指定的方法,该方法会返回一个新的CompletableFuture实例,如果该CompletableFuture实例的result不为null,则返回一个基于该result的新的CompletableFuture实例;如果该CompletableFuture实例为null,则,然后执行这个新任务。
10 thenCompose
thenCompose方法会在某个任务执行完成后,将该任务的执行结果作为方法入参然后执行指定的方法,该方法会返回一个新的CompletableFuture实例,如果该CompletableFuture实例的result不为null,则返回一个基于该result的新的CompletableFuture实例;如果该CompletableFuture实例为null,则,然后执行这个新任务
策略
- 分类API
- 单个写场景学习
参考内容
更多推荐
所有评论(0)