CompletableFuture和Future的区别主要体现在以下几个方面:
- 功能区别:Future 只能用于获取异步计算的结果,而 CompletableFuture 除了能获取异步计算的结果外,还可以用于组合多个异步任务,处理异常情况,以及在任务完成时执行回调函数等。
- 阻塞区别:Future 的 get 方案是阻塞的,如果异步计算没有完成,它会一直等待直到计算完成。而 CompletableFuture 的 get 方法也是阻塞的,但是它可以设置超时时间,如果在指定的时间内计算没有完成,它会抛出 TimeoutException 异常。
- 异常处理区别:Future 的异常处理比较麻烦,需要在任务执行时捕获异常,然后将异常封装到 Future 对象中返回。而 CompletableFuture 的异常处理比较简单,可以使用 exceptionally 方法或 handle 方法来处理异常情况。
- 组合任务区别:Future 不支持组合多个异步任务,需要使用 ExecutorService 的 submit 方案来提交多个任务,并使用 Future 对象来获取每个任务的结果。而 CompletableFuture 支持组合多个异步任务,可以使用 thenCompose、thenCombine、thenAcceptBoth 等方法来组合多个任务。