首页 > 其他分享 >CompletableFuture

CompletableFuture

时间:2022-08-31 22:57:36浏览次数:53  
标签:异步 get 接口 boolean CompletableFuture Future

前置知识

JDK 1.5 新增了 Future 接口,用于描述异步计算的接口。其主功能如下所示:

// 尝试停止当前任务的执行,如果任务已完成、已被取消或由于某些其他原因无法取消,则此尝试将失败。
boolean cancel(boolean mayInterruptIfRunning);
// 如果此任务在正常完成之前被取消,则返回 ture。
boolean isCancelled();
// 如果此任务完成,则返回 ture
boolean isDone();
// 等待计算完成,然后检索其结果。
V get() throws InterruptedException, ExecutionException;
// 最多等待给定时间以完成计算,然后检索其结果
V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;

通过查看源码可以得出 Future 用于获取异步结果的方法较少:

  1. 通过调用 get 方法去获取异步结果,但是这样会造成阻塞。还有就是使用设置超时时间的 get 方法去获取异步结果。
  2. 使用轮询调用 isDone 方法,确认线程是否已经执行完成然后再去获取异步结果。

以上两种方式都有其缺点,一种是会造成阻塞,而另一种会耗费无谓的CPU资源,而且也不见得能及时地得到计算结果。这两种方式有违异步编程的初衷。

在 JDK 1.8 的时候新出了 CompletableFuture 接口,其作为 Future 的扩展。提供了函数式编程能力,简化了异步编程的复杂性,通过回调的方式处理计算结果,并提供了完善的异常处理手段。默认依靠fork/join框架启动新的线程实现异步与并发。

类架构说明:

image

CompletableFuture 即实现了 Future 接口又实现了 CompletionStage 接口,而其 CompletionStage 代表异步计算过程中的某一个阶段,一个阶段完成以后可能会触发另外一个阶段,有些类似Linux系统的管道分隔符传参数。

标签:异步,get,接口,boolean,CompletableFuture,Future
From: https://www.cnblogs.com/lhnstart/p/16644825.html

相关文章

  • Future and CompletableFuture
     Future代表异步执行的结果,也就是说异步执行完毕后,结果保存在Future里,我们在使用线程池submit()时需要传入Callable接口,线程池的返回值为一个Future,而Future则保存......
  • CompletableFuture的简单使用
    日常开发中,我们都会用到线程池,一般会用execute()和submit()方法提交任务。但是当你用过CompletableFuture之后,就会发现以前的线程池处理任务有多难用,功能有多简陋,Completab......
  • 奇淫巧技,CompletableFuture 异步多线程是真的优雅
     一个示例回顾Future一些业务场景我们需要使用多线程异步执行任务,加快任务执行速度。JDK5新增了Future接口,用于描述一个异步计算的结果。虽然Future以及相关使用......