ComplateableFuture应用

应用

CompletableFutures是对Future的扩展和增强,CompltableFuture实现Future接口,在此基础上做了丰富扩展,使用起来极其方便简单,同时CompletableFuture实现了对任务的编排的能力。
使用ComplateableFuture时,如果不提供线程池参数,那么默认使用的是ForkJoinPool
ComplateableFuture应用_第1张图片
而ForkJoinPool使用的是守护线程,当main线程结束时,守护线程会跟着一起结束,那么ComplateableFuture的异步操作也就不存在了。

常用方法:

下面通过Demo对几个常用方法进行简单讲解

runAsync

在这里插入图片描述

supplyAsync

与runAsync类似,有返回值,是ComplateableFuture对象,且入参是supplier,而runAsync入参是runnable
tip:调用后可以使用get方法获取返回值,但是最好设置超时时间,不然会在get时一直阻塞。

thenApply

ComplateableFuture应用_第2张图片

thenApplyAsync

与thenApply类似,但thenApply无法指定线程池。

thenAccept

ComplateableFuture应用_第3张图片

thenRun

与thenAccept类似,区别是无入参无返回参数

thenCombine

用法与thenAccept类似,有返回参数
ComplateableFuture应用_第4张图片

applyToEither

ComplateableFuture应用_第5张图片

exceptionally

用来捕获异常,类似catch,但是用handle更好更灵活,因为handle既可以捕获异常,也可以捕获前置CompletableFuture的返回值
ComplateableFuture应用_第6张图片

allOf

与anyOf相似,一个是参数中的任务都执行完再执行后续操作,一个是只需参数中的任意一个执行完。

你可能感兴趣的:(java)