00:00
各位同学大家好,下面呢咱们继续来学习guc高并发编程课程,下面呢我们来讲解guc中的另外一个支点fok作分支合并框架,首先给大家介绍一下分支合并框架它主要做的是什么事情,也就是说用这个框架咱们到底来干什么事情,那我们来看一下,首先各位看一下我的课件中,我这里写到这里边有两个单词,一个叫VO,一个叫Joy。For可理解为就是咱说的分支,这也就叫做合并。那什么意思呢?这里写的它可以将一个大的任务拆分成多个子任务。进行并行处理,最后将子任务结果合并成最后的计算结果,并且进行输出。而各位看这张图里边for和join的主要做两件事情,一个叫fog,就是做这个拆分,一个做join,叫合并。比如说各位看这张图上,我这里边这个图是不是一个六边形,而我现在把六边形先进行拆分,拆分成两个这个。
01:18
菱形用再拆分成多个三角形,然后拆分之后把多个子任务进行操作,最终再进行合并,这就叫for做引,把你复杂任务进行拆分,就是咱们通俗说的大事化小,但是注意啊,没有小事化了,只是大事化小,最终把你多个子任务再进行合并,这个叫分支合并框架,在实际中很多地方我们要用到这个功能。那我下面呢,给各位咱们来举个例子来说明一下啊,比如说咱们来看一个小例子给大家说明,假如说啊,我想做件事情,我想做个运算,就是咱们都知道一个例子,从一加二加三,我想一直加到这个100。
02:08
想要做这个过程,这个过程呢,如果说咱们用原始方式,一加二加三加四加五,一直加到100,这过程是不是会特别不方便呀,所以咱们怎么做呢?把这个过程我们给它做一个拆分,那怎么拆分呢?比如说我现在啊,我这么来做。首先咱们先拆分第一部分,第一部分的我只算这个操作,就是从一加二加三,一直加到这个20,咱们让这里边又来做这个事情,这是第一个拆分,然后咱们到第二个拆分,比如说我进一步实现,我让他从这个就是21。加二十二一直加到这个,就是比如说加到这个40,做一个降价,然后这个拆完之后,比如说我们再拆第三个操作,让他从这个四十一直比如加到这个60啊,假如说咱们做这个相加就是40,比如加41,然后加一直加到这个60,然后后面以此类推,咱把它拆分成多个部分。
03:21
然后拆分之后呢,各位注意,这是我们拆分的过程,你要拆分多个,然后拆分之后最终每部分是不是有它的结果呀,最后咱们把它的结果再做件事情做什么,就是做一个最终这个合并。所以这就是我们说的这么一个基本过程,咱们通过fo座椅分支合并框架就能完成这个流程,把你的复杂任务拆分成多个子任务,最终把子任务结果再做一个合并。这是关于分支合并框架的一个基本介绍。这种场景实际中咱们会经常用到把复杂任务拆分成多个小任务完成,最终把小任务最终再做一个合并。
04:10
然后这个具体怎么做,下面咱们看一下分支合并框架中一些相关的方法,包一些相关的类。首先大家看这张图里边。这个我应该记得啊,Execor service是咱说那个线声值的操作呀,然后在它下面还有一个东西叫fork join是一个分支合并池,跟线声池类似,这是它用到的第一个这个对象。然后除了这个之外,下面还有一个叫这个future,包括这个叫future,咱记得啊,当时咱们说那个call back时,有一个叫future task是未来任务,这里边有一个类叫做fo join task,还有一个叫receive task,咱是通过这些类来实现我们的功能,那这个呢,咱们通过API文档我们来看一下,咱们找到Java u content包里边找一下这个类。
05:07
这个task。咱们发现啊里边一个小问题,这里边是没有,因为我现在用这个应该是GE这个五或者说以下的版本,所以咱们找一个高点版本,用这JDK7的这个版本,在里边找一下Java u con包。然后咱们到里边看一下,大家看啊,里边现在有这个对象叫fo draw po,就是它这个分支合并这个池的这个对象,另外有一个叫包join task这个任务对象,然后除了这个之外,下面还有一个对象,就这个对象。叫做receive task,咱们最终实现其实就是继承这个类最终实现,然后这个类里边大家看啊,首先它继承了fo作引task分支合并任务,在它里边有一段基础代码,这代码我们先看一下,因为咱们一会儿写的就这过程。
06:06
然后大家可以代码怎么做的啊,首先第一部分我们一个类记上这个receive task在里边,第一部分大家看这行代码什么意思。是不是它的构造,构造中传入你的相关的值,下面有一个叫compete这个方法,然后方法里边你看啊,它有new这个对象,就这里做的就是一个递归,在第一个过程中,咱们首先做拆分,拆分之后用作引方法,再做个合并,只是过程中加上一个结束的条件。各位同学应该知道啊,递归如果说你不加接收条件是会一直执行下去,所以咱们加上一个递归的接收条件,现在通过这个过程就实现了创建分支,包括合并分支用的方法叫各个方法,合并用的方法叫这个作用方法。
07:00
所以现在咱把这个分支合并框架给各位,就是这个介绍,包括它里面的类,包括它对应这个操作,咱们一会儿就通过这个新宽带什么来完成咱们的最终功能,这是关于我们说的分支合并一个基本介绍。然后这个介绍之后呢,下面呢,我们就通过一个具体的例子来实现一下咱们这个分支和框架,现在各位先把这个基本的过程,包括它的特点,包括里边的类和方法,这个他知道咱们马上来完成这个具体例子。
我来说两句