00:00
下面呢,我们继续来学习口A接口,刚才呢我们对口一保做了一个总体上的说明,并且引出了一个重要的对象,叫做future task未来任务,那下面呢,咱就来说一下这个future task这个代码到底我们该怎么去写。并且future task这个未来任务,咱们该怎么去理解这个未来任务这个词,那下面给各位来解释一下,首先我们先计算代码,把这个就是future task,它该怎么去用给各位来写一下。比如现在我在这里边呢,我就用这个future task,咱们来做一个简单的使用,那我来写一下。Future。Task,那现在我在里边加上一个叫这个future task这个。然后在future task中,比如加一个泛型,咱们来一个叫integer,然后给它起个名字,我就叫future task,比如再来一个一等于new上一个future task,刚才咱们说的在future task里边,咱是不是能传入参数,而它参数中就包含咱这个口A接口,当然里边也能传这个软内接口,那我们现在给它传入一个口A接口,Co a接口呢,刚才我是创建了一个类叫MY2,那我现在把这个MY2给它就扭进去。
01:35
咱们溜上一个MY2,所以大家看这一行带什么,咱是不是就创建了一个叫future t这个未来任务,把这个就写出来了,这么写是可以的,但是我们这么做是不还需要写个类来实现呀?所以咱可以把它带什么做个简化,通过咱们的拉姆的表达式。把这个给它做一个简化。
02:00
就用它来简化一下,那我写一下啊,加上task,就是加上一个inle,这个叫future task2,然后咱们等于就是new上一个future task里边加上一个拉姆的表达式的形式。然后在拉的表达式里边写上咱们那个具体内容,比如现在我就直接re成一个值,咱就成一个,比如1024。所以这样的话呢,我们现在把这个就是最基础的代码就完成了,这是用拉姆的表式做一个简化,然后这过程中给各位特别说明,因为它里边呢,传的是一个口able接口,而口接口大家看到。这是什么?是不是叫函数式接口?函数式接口咱是不是能用拉表达式做简化,然后它默认执行里面的Co方法,所以咱们通过这个代码把这个做了一个简化,这是关于future task这个未来任务对象一个最基本的使用,这是我们直接写类实现。
03:07
这个是用拉姆表达式把它这个简化,所以这个我们就说完了,然后这个说完之后,下面呢,给各位来说一下这个future task它的原理是怎么样的,或者说为什么它叫未来任务,那这里边给各位来解释一下什么叫未来任务。那我来说明一下啊,这个里边呢,我给各位同学来举这么三个例子,咱通过三个现实的例子来说明什么叫未来任务,我觉得我把例子说完之后,各位同学应该能理解什么叫回来任务,那我现在我举第一个例子啊。比如说啊,现在我作为老师嘛,我现在正在上课,比如现在我上着课的时候呢,突然我口渴了,就我想喝水了。
04:00
注意啊,比如这是一个场景,我口渴了,我想喝水,但是这个时候你注意啊,我口渴了,因为我正在上课,比如说这时候恰巧我现在杯子里没有水,我是不是要出去接杯水,或者说我去超市买瓶水,但是这个时候我现在去买瓶水。是不是不太合适,因为我要上课嘛,如果我去买水的话,课肯定不能上了,而这个时候我上课肯定要继续,那我怎么做,大家说我要怎么做,就是我讲课这个线程肯定要继续进行,那我这个时候是不是可以找班上的某个同学帮我去买水呀,也可以理解为就是我现在。单开启一个线程,然后找我,就是班上的某个同学啊,比如班上这个班长。让他帮我去买水。那这个时候班长去买水的话,我是不是还继续上课呀,等班长,比如他把这个水买回来了。
05:04
那他买回来之后,我这个时候我口渴的时候,就是我需要的时候,直接我去盖头是不是可以了,就直接我去拿这个水喝是不是就可以了,所以这个就叫未来任务,就是在我主线程不进行影响的情况下,我可以再单开一个线程,让他去做其他事情,然后我主线程如果用的话,直接从那里边把这东西拿过来直接用就可以了。就是我举例子,我口渴了,班长帮我去买水,那我讲课继续,班长买水回来之后放到我桌子上,我口渴直接喝是不是可以了?这个过程就是咱说的叫未来任务,在不影响主线程情况下,咱们可以单开一个线程,然后做一些其他事情,我主线程到里边直接得到就可以了。这是咱们举的第一个例子,就是买水的例子,各位把它知道,这叫未来任务。
06:03
然后除了这个之外呢,给大家再举个例子啊,这个例子也能说明未来任务中的一个特点,那我来说一下啊,什么意思,比如现在啊,我这里边有四个同学,比如现在呢,我想让四个同学分别做一些计算,那怎么做呢?比如说现在啊,我让第一个同学。给我做个计算啊,就算这个,比如说从这个一。一直加二,一直就是加到这个五,让他做这个计算,这是第一个同学做的事情,然后这个时候呢,比如现在我让第二个同学继续计算,让他算个值,就是从这个就是比如从这个十加上11。再加上12,一直加到这个50,让他来做这个事情,然后现在我再让这个第三个同学再做一个事情,让他就直接计算从这个就是60,一直加到这个61,再加上62,比如加这个纸,就是这个时候还有第四个同学。
07:13
让他就是继续做计算,比如他算这个比较简单,直接算这个从100加到。200就是100加200这个值,所以现在我让四个同学分别做这个计算,当然各位注意啊,这四个同学计算过程中,第一个同学从一加二加三加四加五是不是很好计算,第二个同学从十加11加12加到50,这计算量是不是有点大呀?比如说我这里写到啊,就是咱目前里边这个第二个同学。就是第二个同学,他的计算量是比较大的。而他要计算的话,是不是花费时间比较长,而第三个同学,第四个同学计算应该比较简单,那这个时候呢,比如说现在啊,我这里边就是我给四个同学分配了任务,然后现在我走到一个同学旁边问他,你告诉我结果,他告诉我多少多少,而现在我走到第二同学旁边问他,你把结果告诉我,但是第二同学可能告诉我说现在这计算量太大了,我没有算完,那这时候我怎么做?
08:24
我是继续等待吗?是肯定不是,可能我等的话可能需要等很长时间,那这是我怎么做呢?我就可以啊,给这个第二同学单独开个线程,让他先计算,然后这个时候呢,我先找第三个同学,再找第四个同学,最终再回来找第二同学,最终再进行汇总,这就叫未来任务,也就是说咱们通过这个叫future task。用这个为任务,我就是单给它开启一个线程,这个线程就给这个第二个同学,让他单独进行计算,然后咱们就是我先去汇总这个第一个同学,第三个同学,还有第四个同学,然后最后再等这个第二个同学计算完成。
09:20
最终再做统一的这个汇总,这就是我们说这个未来任务,就是第二个同学呢,让他先算着,但是我们的主线流程不影响,我先找第三位同学,再找第四个同学,都找完之后,最后回来再找第二同学,看他的这个结果,这就叫做未来任务,在主线流程不进行影响的前提下,咱们开几个线程,先做别的事情。这是我要举的第二个例子,然后这里边呢,还有第三个例子,就是咱们考试这个例子,这例子应该也很明显,大家注意啊,咱们考试的时候是不是先做这个会做的这个题目,然后咱们都做完之后,最后再看这个不会做的这个题目。
10:11
就最终你再做,不会做的,最后再进行汇总,这就是咱们说的未来任务这个原理。所以大家把这个过程给他知道,也就是说在不影响主线程的情况下,咱们单开启一个线程,在里边做其他事情,然后最终我们再进行汇总,这是我们提到的,但是这个过程中呢,它还有一个特点,就是咱们最终汇总的值,其实只需要汇总一次就可以了。那这个什么意思呢?给大家举个例子啊,还是举这两个例子。比如说我现在啊,我在课上我口渴了,找班长帮我去买水,那这个时候呢,比如班长到楼下超市给我买了一瓶矿泉水给了我,然后我在喝的时候,我我告诉班长说这个矿泉水啊,没有味道,我不喜欢喝,那这时候班长呢,来到楼下给我换了一瓶什么,比如说换了一瓶可乐,然后给我说老师给你可乐喝,然后我说这个可乐虽然说有味道,但是可乐的颜色太重了,我想换一瓶颜色不重的水。
11:19
那这时候班长到楼下给我换了一瓶水,比如他换了一瓶雪碧,把雪碧给我,然后我看到雪碧,比如我说了这个雪碧呢,虽然说啊味道很好,颜色也不重,但是它的气太浓了,就是它里面都是二氧化碳嘛,这时候我想找一个颜色不重,又有味道又没有气儿的这个饮料,那这班长可能很生气,然后他到楼下,比如给我买了一瓶水,假如说买了一瓶这个什么这个冰红茶给我,我觉得这个很合适。你注意啊,这过程班长是不是费了很多的事,最终买到适合我的口味,那比如说第二天我再上课,我问班长,这时候你给我去买水,我口渴了,那问各位,这时候班长只需要买什么就可以了,是不是只需要只买冰红茶呀,不需要再折腾这个流程了,这就叫只需要汇总一次。
12:12
然后第二例子也能说明,比如现在这四个同学都做这个计算,比如他们现在啊,两次都算同样的这个数据,那我第二次我再找第二个同学,他是不是就不需要再算了,把结果直接告诉我是不是可以了,所以这就叫汇总一次。这些就是咱们说这个future task,未来任务这个相关的特点,也就是说你的主线流程依次往下进行,咱们可以单开几个线程做其他事情,最终再汇总,然后他在汇总中只需要汇总一次,就是我举这个买水的例子,包括计算的例子,这是关于我们说的future task里边这个基本的要原理,各位把这个要理解。
我来说两句