comple CompletableFuture 简单与链式的区别

栏目:生活 2021-09-17 22:44:52
分享到:

示例2和示例1的区别在于示例2的任务有一个返回值。没有返回值的任务提交Runnable并返回CompletableFuture;对于有返回值的任务,提交供应商并完成未来;被返回;供应商和前面的Callable很像。

从上面两个例子可以看出,CompletableFuture和Future在基本用法上是相似的,都可以提交两种类型的任务:一种没有返回值,另一种有返回值。

链完成未来:然后运行、接受和应用

对于Future,提交任务后,只能调用get等结果返回;但是对于CompletableFuture,可以给结果添加一个回调,得到结果后再执行回调。

示例1:然后运行

例2:那么接受

示例3:然后应用

在这三个示例中,任务执行后紧急执行回调,但回调形式不同:

然后Run后面是一个没有参数也没有返回值的方法,即Runnable,所以最终的返回值是CompletableFuture;类类型。

ThenAccept后面跟一个有参数没有返回值的方法,叫做Consumer,返回值也是CompletableFuture;打字。顾名思义,它只能进出,所以叫Consumer;前供应商没有参数,有返回值,只能出不去,和消费者正好相反。

“应用”后面是一个带有参数和返回值的方法,称为“函数”。返回值为CompletableFuture;打字。并且该参数接收前一个任务的返回值,即supplyAsync。因此,这里只能使用supplyAsync,不能使用runAsync。因为runAsync没有返回值,所以不能为下一个链式方法传入参数。

并且该参数接收前一个任务的返回值,即supplyAsync。因此,这里只能使用supplyAsync,不能使用runAsync。因为runAsync没有返回值,所以不能为下一个链式方法传入参数。

表示“受到某种对待的人”:dividend | reverend

先前的建议

为什么SQL查询要用Stream的方法?

线程本地内存泄漏的深入分析

为什么我用GraphQL代替REST API?

Spring Native Beta正式发布,杀死原生JVM!

MySQL主从复制解决了什么问题?如何解决同步延迟?

分享,喜欢,看,给一个3连击