论异步编程

2020-01-09  本文已影响0人  米斯特劳恩

相信本书介绍了CompletableFuture,大家就会认识到什么是异步编程。异步编程的好处。

异步编程最大好处就是:高并发,异步处理,速度快,请求量不会一直堆积。避免流量冗余,或者服务宕机的情况。此书很好的介绍了异步编程的实战。结合实际案例来分析异步编程,并且介绍了jdk的新特性。很好的解决了大多数读者目前的现实工作或学习中的问题,是一个值得借鉴的书籍。

一般不怎么夸张,但是看到本书的目录,还是要说说,感觉比较接地气。还是比较不错的,相信也有读者看了本书,也有一定的感受吧。

正是因为CompletableFuture的出现,才使得使用Java进行异步编程提供了可能。 异步编程技术目的,重点并非提高并发能力,而是提高伸缩性 (Scalability)。高内聚,低耦合。

CompletableFuture在Java里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过 回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息。CompletableFuture实现了Future, CompletionStage接口,实现了Future接口就可以兼容现在有线程池框架,而CompletionStage接口才是异步编程的接口抽象,里面定义多种异步方法,通过这两者集合,从而打造出了强大的CompletableFuture类。

Futrue在Java里面,通常用来表示一个异步任务的引用,比如我们将任务提交到线程池里面,然后我们会得到一个Futrue,在Future里面有isDone方法来 判断任务是否处理结束,还有get方法可以一直阻塞直到任务结束然后获取结果,但整体来说这种方式,还是同步的,因为需要客户端不断阻塞等待或者不断轮询才能知道任务是否完成。

Future的主要缺点如下:

(1)不支持手动完成

这个意思指的是,我提交了一个任务,但是执行太慢了,我通过其他路径已经获取到了任务结果,现在没法把这个任务结果,通知到正在执行的线程,所以必须主动取消或者一直等待它执行完成。

(2)不支持进一步的非阻塞调用

这个指的是我们通过Future的get方法会一直阻塞到任务完成,但是我还想在获取任务之后,执行额外的任务,因为Future不支持回调函数,所以无法实现这个功能。

(3)不支持链式调用

这个指的是对于Future的执行结果,我们想继续传到下一个Future处理使用,从而形成一个链式的pipline调用,这在Future中是没法实现的。

(4)不支持多个Future合并

比如我们有10个Future并行执行,我们想在所有的Future运行完毕之后,执行某些函数,是没法通过Future实现的。

(5)不支持异常处理

Future的API没有任何的异常处理的api,所以在异步运行时,如果出了问题是不好定位的。

本书主要介绍了CompletableFuture的定义,概念及在Java中使用的例子,通过CompletableFuture我们可以实现异步编程的能力,从而使得我们开发的任务可以拥有更强大的能力。

值得大家看看,分享下!

https://book.douban.com/subject/34920246/

上一篇 下一篇

猜你喜欢

热点阅读