00:00
各位同学大家好,我们继续接下来我们给大家介绍一下future对future的改进来。那么,首先computer为什么会出现?通过前面的讲解,我们都清楚,对于异步任务的future接口有明显的两个软肋和痛点。第一个,你一旦调用get方法,假设在计算完成之前,它容易导致程序阻塞。我们前面强调过,你get算完了,直接给你皆大欢喜,但是假设我还没有算完,你就要get来取,容易导致程序阻塞,系统的性能急剧下降。好,那么接下来我们最希望的就是你完成了以后,我再来取。那么这个时候我调用get,一定是你计算完成的时候,那么这样如何来保证这个时间点呢?我们就用is done判断,反复多次的询问容易耗费CPU资源,所以对于真正的异步处理,我们希望是可以。通过传入回调函数,你结束的时候,也就是我们前面所说的when complete,当你完成的那个时候,你回调我给我一个通知,这样我既不用等待阻塞,也不用反复多次的去问你,那么这样的话,我们获得的结果系统的性能远远高于前两者,所以阻塞方式和异步编程的设计理念相违背。
01:23
轮的方式啊,又会导致CPU空转,浪费资源,因此从JAVA8开始设计出了我们的对接口的扩张,我们现在主要使用compatible future来替代我们的future。所以说compat future提供了一种。类似于设计模式里面的观察者模式,他让任务执行完成以后,再通知监听监控的一方,哎,能够让大家产生回调,然后让大家组织大家的任务阶段进行更深度复杂的功能扩张。好,那么下面我们呢来看一下卡。源码。
02:00
那么这个时候同学们请看。OK,刚好第一个,那么注意一定是JAVA8的源码,那么这时候大家请看。作者是谁?利前面介绍过了对吧?扫地森goc包的作者从多少版本八?那么大家请看,首先他是个啥?Comp future是个类。注意,同时实现了两个接口,一个叫future接口,那么好,另外一个叫completion stage,那么stage什么意思啊,是不是?完成步骤阶段的意思,哎,就跟爬楼梯的一层一层的楼梯,那么自然而然,通过源码的分析和讲解,我们可以清楚。他们两个源码的介绍,我们可以看到类架构的说明,明显的可以感觉。这个类同时实现了两个接口,那么自然而然future接口所有的API功能特性,这个东东完全具备future接口不具备的,它通过相似功能的扩张和加强,那么自然而然会比原有的功能更加强大,哎,所以说我们接下来future介绍过了这个接口。
03:13
那么completion stage又是什么概念呢?那么下面请跟着。老师进一步深入了解,首先先来看一下接口comp states,那不妨我们回到源码。点开这个接口。大家。我的妈呀,这个接口大家可以看一下有多少个功能。一堆堆方法吧。那么回过头去,再。回忆一下我们之前讲过的future接口,大家请看只有几个API,光从API的量上咱们先不说,功能上我们也明白,那么这个是不是我们的stage,这个接口远胜于我们的future接口,Future接口五个completion stage,大家看是不是一堆啊,接近。三四十个吧,所以说后续我们会按照分类给大家进行详细介绍,这是他牛逼和功能强大的地方,那么它是干什么呢?
04:04
大家请看字面意思comp完成,然后这个什么stage步骤完成的步骤,那么是不是分阶段的任务啊,一步一步,所以说各位同学请过来看。对于这个接口,Comple stage代表异步计算过程中的什么某一个阶段,一个阶段完成以后可能会触发另外一个阶段。好,中间这一段就是刚才我们看到的某些方法,此时同学们请忽略,暂不展开。后续我们用编码实战的案例给大家介绍。那么这我们先看理论文字,那么一个阶段的执行可能是被单个阶段的完成触发,也可能是由多个阶段一起触发,那么代表一步计算过程当中的某一个阶段,一个阶段完成了可能会触发另外一个阶段,有点类似于我们的link系统的管道分隔符,什么意思啊,完成步骤。前面我们是是不是说过买水煮鱼这个案例,买鱼调料烹饪下锅,那么巧妇难为无米之炊,你要做水煮鱼这道菜,前提是先要有鱼,那么第一步也就是说你必须要鱼买到手了,确定有鱼这个原材料了,那么才能到第二步。
05:15
调料。有料有鱼才能下锅做烹饪料理上桌,对吧?那么所以说要有三,就依赖于二,二就依赖于一,一完成了才能到二,二完成了才能到三,所以说回到我们这每一个异步计算过程中的某一阶段,就像爬楼梯一样的step by step,这个就叫一个completion stage,也就是我们的一个什么异步计算的一个阶段步骤,好,那么这个接口。如果用类满足了以后,那么同学们可以看一下它是什么呢?在JAVA8当中提供了什么future的扩展功能,那么我们前面说过,这个是I,这个是爱加加,那么后面的技术肯定会比前面的更加强大,是它的一种什么扩展功能,那么可以帮我们简化复杂性,提供了一些函数编程的功能,那么我们呢,可以用回调的方法处理结果,好,那么它可能代表一个明确完成的future,也可能表示一个什么完成的阶段,就是一步一步的,那么这些组合了以后,我们来实现我们更多复杂的功能,好,那么理论知识给大家说完成这个就是我们computer future,它的功能和作用是什么?最经典的就是大家记住这个类架构图,由这个类后面我们来完成这两大接口的组合,完成对future异步任务的扩张,直接直接,直接使用这个类来进行异步任务的调用,OK,好,这个就是我们对comp future它的来龙去脉做一个简单的介绍。
我来说两句