00:00
接下来我们来说一下两任务组合,在我们这个comp future里边提供了一些方法,比如then combine,按照翻译,那就是接下来我们这个组合合并,然后呢,还有我们这个then accept boss,诶,这个两个,然后呢,还有这个run after boss,这都是两个,那它的作用呢,就是我们这个两个任务都完成以后,我们再来触发一件事情,所以呢,我们看了它的这些方法,那方法呢,我们还是倒着看,首先呢,我们来看我们的run after boss。先来看返回值,首先如果我们运行这个方法呢,那就是没有什么返回值的,我们再来看它的传参,我们run after bos呢,会传我们的completion stage completion stage以及runnerable completion stage是什么?我们来给大家看一下,我们如果用compli future启动了一个异步任务,它返回的呢,就是compible future,它其实呢就是comp stage,也就是说我们在这呢再传一个compli future,我们第一个异步任务点一个调用我们这个方法再传一个异步任务,然后这两个异步任务呢,都干完以后,那再来做后边的这个runable指定的事情。
01:18
但是我们发现这个run after boss,由于它只能传runnerable,所以呢,我们这个run after bos它的所有方法,它呢不能获取到我们这两个任务,就是呢,我们当前的任务,以及他要组合的这个其他任务,不能获取到这个结果,只能说呢,我们这两个任务都干完以后,他做一键处理就行了啊我们再来往上看,我们有一个叫z accept boss,所有这些加asy nc的都能传我们这个自定义线程池的,我们这就不说了,他们都是一样的,而我们这个z accept boss,我们发现它传参的时候呢,除了传我们要执行的这个任务,哎,我们这个A任务,我们这个应该是要组合的任务,那还要传一个我们这个action,但这个action呢是一个什么BI consumer,它呢有两个参数,那这两个参数既然叫consumer,那就叫消费者,消费者呢只能拿到我们这个值,这两个参数就是我们AB这两个任务。
02:18
执行成功以后的返回值,那拿到以后我们再来干事,所以呢,我们这个then accept boss,它是组合我们两个future,但是呢,它可以获取到我们这两个future的返回值,并拿返回值来做我们指定的事情,再来往上看,还有一个叫then combine,这个combine呢,那就是组合,组合呢,我们发现它呢。除了船,我们将要合并的另外一个异步任务,好,A任务combine了,B任务,这两个都完成以后,我们来做这个FN,但这个FN呢,我们发现这有三个参数,TUV,那这三个参数呢,其中U跟V,那就是我们第一个方法的返回值和第二个方法的返回值,那么这两个异步任务的返回值我们拿到,包括呢,我们想要干的这个事情,我们肯定还有一个返回值,我们想要后来获取。所以呢,我们。
03:14
这还有一个泛型,那我们就可以使用z combine办方法,我们能获取到前两个任务的返回结果,并且呢,我们处理完以后,把我们自己的结果再返回出去,别人呢就能拿到我们的结果了。好,我们来看一下效果,比如我们在这来测试一下,我们来组合多个任务,我们使用com办来合并,好把这个我们在这来打印一下,我们这呢是两个都完成,两个都完成,我们两个都完成,相当于我们要合并两个一步任务,我们把这个一步任务呢,我来复制一个,这还是我们第一个任务,第一个任务呢,先给我们执行来计算我们这个十除四的结果,我们把这个任务呢,我们先来返回,好,这是我们的第一个一步任务。
04:02
好,我们就叫FUTURE01,由于我们要组合两个任务,所以呢,我们再来一个任务,比如呢,Compli future,我们再来一个叫supply anthnic,因为这个supply呢,我们可以有返回值。好,我们就让它有返回值,我们来执行一件事情,这个呢就直接返回一个hello就行了,我们这个任务二很简单,返回一个hello,并且呢,在自己的线程池里边,好,我们指定的线程池里边执行,这是我们的FUTURE02好,我们在这呢,就来打印我们这个任务一线程,我们这个任务一任务一任务一咱们这个线程启动了,然后呢,我们这个任务一结束,任务一咱们这个结束。然后呢,我们再来看任务二,那任务二我们在这也打印一下CTRLC,好,任务二呢会给我们返回hello,我们就叫任务二开始,任务二结束,那我们还有一个任务三,但是我们这个任务三呢,希望他两个都完成以后来做事,那怎么办呢?我们就可以future1.1个com back,那么这个Z。
05:12
那then里边呢,我们就可以用这么多的方法,首先呢,它有run after boss,我们虽然可以组合任务,但是不能感知前两个任务的返回结果,好们先来用then run一个,诶,我们一取着run after bos,好,我们就使用我们自己的线程池来执行这个任务,我们这个FUTURE1相当于要合并的是FUTURE202,然后呢,我们先来传一个我们自己的线程池,然后接下来我们这一块要干什么活,我们点进来它呢,传一个runable,相当于我们接下来。任务一二都完了以后,我们要干什么事,好,我们就在这儿来做一下,我们就叫C4OUT,我们这个任务三开始,这个任务三开始,那这个任务三呢,肯定是任务一二都结束以后才进行的,我们来看一下最终效果,我们来启动。
06:10
好,我们来看控制台打印,我们发现呢,任务一任务二都结束以后呢,我们的任务三才开始,所以呢,我们这就是两个都执行,但是呢,我们这个run after boss,但是呢不能感知到前两个的结果的,那么用一个另外一种方式好FUTURE01还是我们以前呢是run after boss,现在呢,我们使用这个叫then accept boss,然后接下来我们then accept,我们接收两个好boss,还是以asy nc的方式。这个boss呢,先来指定我们要组合哪个任务,来组合FUTURE02这个任务,这两个任务都干完以后来干一个活,在哪干活呢?在我们这个,让我们这个线程池帮我们来干活,那我们要干什么活能点进来它呢,第二个传的是一个BI consumer,好我们把这个复制过来,我发现呢,这个BI consumer它的这一块声明呢,相当于只有两个入参,这两个入参呢,分别就是零一和FUTURE02的返回值,好我们把这两个入参。
07:15
F1,我们就叫F1F2我们拿过来,然后呢,我们来干一件活。而且呢,我们无需有返回值,所以我在这儿再来一打印我们任务三开始,那么得到之前的结果,之前的结果我们也能看到,来加上F1,再来加上我们这个分割一下,再来加个F2。那么这个任务三呢,还是在一二完了以后我们再来执行,我们来看一下效果走。好,我们发现任务一任务二结束以后,我们这个任务三呢就执行了。而前面两个的结果,一个是二,一个是hello,我们都能获取到来,一个呢,返回二,一个返回hello没问题,所以呢,这是我们的then accept bos,好,我把这个呢再来主掉,那更进阶的方式就是我们使用then combineba,好,比如说零一我们使用then combineba,我们来合并多个任务,这个combine呢,我们还是来传入我们的future,零二我们还是在我们的线程池里边来进行执行,但这个combine里边可以传一个BI function式,而这个function式呢,我们发现返回值也有泛心约束了,所以呢,相当于我们自己还可以指定返回值了,我们接下来就来写上,还是一样,我们可以既拿到之前的前任结果,我们还能进行处理得到返回值,那我们处理呢,就把这两个结果给我们拼一个串,比如我们用冒号分割拼一个串,那么这是我们最终的返回值,那再来拼一个。
08:53
比如我们就叫箭头哈哈,好,那这就是我们从两个执行到的结果得到记录以后,我们来给它再自定义处理,我就叫哈哈吧,以前就叫哈好,我们来看一下现在的效果,相当于既能接收返回值,前两个的返回值,又能我们自己返回数据,那么自己返回数据呢,肯定还想用,所以呢,我们把这个自己返回来的数据,如果我们想用,想打印,我拿来点一个get方法,我就能打印了。好,我们来启动起来,Get方法呢,就是获取我们整个这个异步合并后最终的返回结果。
09:30
好,那现在来看效果,我们最终拼的串12冒号哈,箭头哈哈,这都是我们自定义处理的结果,那一切都是正常的,这是我们两个都执行。
我来说两句