这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
CompletableFuture是java 8提供的用于异步编程的APi。CompletableFuture表示一个未来完成的任务,比如我们new一个线程执行其他操作,这时我们很难判断这个线程什么时候执行完毕。CompletableFuture提供这样的能力。CompletableFuture支持传入回调函数在任务执行完成后执行回调函数。
介绍
CompletableFuture实现了Future和CompletionStage接口,如下图:
CompletableFuture类图如下:
Future
Future表示异步计算的结果。提供了检查任务是否完成、等待任务完成以及获取任务结果的方法。Future的定义如下:
Future提供的方法如下:
cancel:尝试取消任务,可能取消失败isCancelled:查看任务是否已取消isDone:查看任务是否完成get:获取任务结果get有一个重载的方法,不传参数时get会阻塞一直等到任务完成,传入时间参数时,get在等够传入的时间后,如果还没完成会抛出等待超时异常
CompletionStage
CompletionStage是Java 8 新增的接口,表示执行任务的阶段,提供在任务执行阶段中执行某种操作的能力。CompletionStage提供的方式如下:
CompletionStage中方法接受的参数都是函数式接口,从命名规则可分为以下几种:
then开头: 表示任务完成后执行参数(函数式接口)run开头: 表示任务运行前后的阶段,执行参数(函数式接口)apply开头: 表示和其他任务关联执行后,执行参数(函数式接口)whenComplete开头: 表示任务完成或出现异常后执行操作,执行参数(函数式接口)handle开头: 表示任务完成或出现异常后执行操作,执行参数(函数式接口)Async结尾:表示异步执行参数(函数式接口)
CompletionStage中方法会返回一个新的CompletionStage
使用示例
创建异步任务
-
无返回值
2,有返回值
-
当前任务执行完成后,将执行结果传给参数(
函数式接口)执行 -
当前任务异步执行完成后,将执行结果传给参数(
函数式接口)同步执行 -
两个异步任务并行执行,都执行完后执行某种操作
-
两个异步任务并行执行,有一个执行完后执行某种操作
-
两个异步任务并行执行,谁先执行完就用谁的结果执行某种操作
-
任务执行完成或出现异常后,使用完成结果或异常执行某种操作不会捕获异常
8,任务执行完成或出现异常后,使用完成结果或异常执行某种操作会捕获异常