00:01
各位同学大家好,下面呢,我们继续来学习doc高并发编程,咱们来看里边的第13个内容,Compable future异步回调,那首先咱说一下什么叫异步。说到异步呢,各位会想到是不是有步,所以咱们先解释一下什么叫同步,包括什么叫异步。那这里边呢,给各位来举个例子来说明一下这两概念咱该怎么理解?首先我先说一下什么叫同步,我来举个场景,比如说我现在啊,我到这个教室中呢,想找在座的某位同学,按照同步方式我怎么做呢?给大家说理过程,比如现在来到教室中,我说我找张三,然后发现张三他没在他的座位上,按照同步咱怎么做?我是不是坐在他座位上等他回来,他不回来,我是不是一直等着他回来,这个叫同步,那什么叫异步呢?给各位有这过程啊,比如现在我到班上找张三,发现张三不在,那我怎么做?
01:08
我会告诉他旁边同学,告诉他一会儿张三回来,你给我发个消息,然后我回到办公室中,是不是做我自己事情就可以了,这个叫异步。所以这是关于同步和异步的最基本解释,同步就是我一直等他回来,异步就是我告诉别的同学,他回来之后告诉我一声,我回来再来找他,这叫同步和异步,所以大家这类特点啊,而在我们doc中呢,有这么一个类叫complete able future,它是用于做这个异步回调的,那这个类呢,我们可以先看一下,比如说啊,我随便找一个,里边咱们看一下这个类的一个基本的这么一个代码结构,那咱们来看一下啊,比如在里边呢,我写上这个类啊,叫这个complete able future。我写一下啊complete。
02:01
Com啊t future,然后这个呢,咱们通过idea工具里面那个视图来看一下,大家看它的结构我们看啊。Comp future它怎么样,是不是实现了future这个接口,这future这些咱都用过,包括咱之前用那个未来任务等等是不是都用过,所以它就实现了filter接口,专门用于做这个异步回调的基本操作,所以这个啊,关于它一个基本结构,那下面呢,咱就把这个complete able这个相关的方法给各位演示一下,包括在我课件中也写到啊,它跟feel一个关系,然后里边一些基本方法,那下面呢,给各位演示两个方法,一个是没有返回值的异步方法,一个是有返回值的异步方法,那咱做个演示没反质的方法,它的名字叫run a s y c,有反应值的方法叫这个我们看一下啊,叫这个s supply v sy c,那下面呢,我把这两方法给各位,咱们通过代码我们来演示一下,一个是没有反应值的异步调用,一个是有反应值的异步调用。那么下。
03:13
面在代码中,咱们来写一下啊。首先这个位置呢,比如说啊,我先建个包,这个包我起个名字就叫这个complete able。啊,PTA变咱们这个包。然后在里边呢,我来创建这么一个类啊,这个类我起个名字就叫complete。这个future。DEMO啊,咱们就叫这个名字啊tu呃,这个名字啊,改一下啊。呃,T。这是我们建的这么一个类啊,然后这个类创建之后在里边呢,咱为了测试方便,我加上这么一个问方法,在问法里边来演示刚才说的两个方法,一个是异步调用,就是没有返回值的,还有一个叫做异步调用。
04:16
就是里边有返回值的两方法,那这里边给各位来演示一下啊,首先我们先写第一个方法,我在里边写一下啊,它叫complete。Future里边加个泛型,这各位要知道啊,如果说你有返回值,是不是加上你的泛型的这个类型了,但是如果你没有反应值,我们加什么。是不是要加上一个叫为呀,这个代表没有反应值啊,这个应该清晰啊,里边这个特点,这个加上之后,咱们起个名字就叫complete future1我们等于调用complete future里边这个方法。
05:00
它的方法呢,就是咱们刚才说那个叫run。Asy c,这表示异步调用没有反制的方法,然后在方法里边我们看一下啊,这里边的结构。大家看啊,这一方法中是不是有一个叫run ne这个接口,所以咱们还是通过拉姆的表达式的形式来完成里面这个代码,之前咱应该写过很多遍这些代码,那我在里边,比如说啊,我就做一个输出吧,那就把当前这个现成的名称我们来输出一下啊,就是threat.current threat.get name,然后后面我给它起个名字啊,咱就说这个叫comp future1。这是我们完成的这么一个方法,然后完成之后啊,其实咱们可以调里边的另外一个方法。叫做get方法,最终结束在那个代码,所以这样的话,我们就完成一个异步调用没有返回值的一个过程,这个get的方法中会有异常,那这异常呢,我就给它直接throw出去啊,这throw这个exception了,所以现在这个方法我们就完成了里边这个特点啊,大家把这知道啊,然后完成之后,下面咱来执行一下,看一下里面这个效果。
06:20
我们来执行,然后各位看我当前线程名称是不是就输出了啊,它从里边得到里面那个值,这是咱们的第一个啊,就是异步调用,然后是没有返回值的这方法它叫re s y c,那下面呢,我再讲一个有返值的异步任务的方法,咱们来做操作。那我在里边写一下啊,比如现在我们给它用这个complete filter里边加个返回值,咱就来一个这个inter了,然后给它起个名字,我们叫这个二等于complete future里边这个方法,这方法叫做supply s y c,然后里边其实传的呢,也是一个函数接口啊,比如咱们看一下是不是这个supply啊,也是一个接口,然后这个接口里边就是有它内容啊,包括里边相关的东西,所以咱们现在用这个方法我们来做实现。
07:18
然后这个方法中我们怎么实现呢?咱们往后来写一下啊,在里边肯定还是写上一个拉姆的表达式的形式,然后在里边咱们给它做这么一个输出啊,那我来输出一下啊,也是把当前的线程名称,咱们输出一下这段内容,我就把它直接复制过来了,比如我们叫这个二。然后大家注意啊,这个方法是不是有返回值啊,那咱就蕊出一个值,比如蕊存这个1024,这样的话,这部分我们就写出来了,然后写完之后注意啊,因为它是异步调用,并且有返回值,所以咱们还需要进一步处理一下,用complete f2里边有一个方法。
08:04
大家看这方法啊,这应该很好理解。When complete是不是当它完成之后在那调用了,然后在方法中大家看。这个里边呢,其实也是写上一个,这个叫big卡,也是一个函数接口,只是它跟之前的区别是什么呢?里边是不是有两个参数,所以咱们要得到里边的两个参数来写一下,按照咱们拉表示那个特点啊,就是复制小括号,写子右箭头落地大括号,它的小号中有两个参数,那我们写一下啊,一个T,一个U。加上一个拉姆表达式,然后在最后我把这两个值,比如说我们做个输出啊,第一个值就是这个T。咱们给它输出一下,然后第二个值就是里边那个U啊,我也给它输出一下,就是U等于。我们这个值,所以现在这个做到了,然后最后咱也调一个get方法,让它最终完成,所以现在啊,这是我们写的里边的第二部分,就是异步调用有反应制的情况,然后在里边大家注意啊,它有两个参数,一个是不是T,一个是U,那咱试一下啊,看两值它分别是什么,咱们做一个测试,看一下效果啊。
09:25
大家看啊,线程输出了,然后这T是不是1024啊,比如咱们看到这个T是什么,是不是你这个方法的返回值啊,啊,这就是方法的返值,而咱看这U,所以它这U是什么啊,其这U你可以理解为就是得到你方法过程中那个异常的信息,比如说咱这方法执行过程中有异常,那U又把你那个异常给他获取到,那这里边比如说咱们也是试一下啊,给它来个异常。那我就直接咱就为了测试啊,我们就模拟一个异常。
10:01
模拟一下,我来看这效果,那模拟怎么做呢?咱写一个最简单的,就是除以零。是不是异常,因为零不能做除数嘛,你除以零肯定会报一个异常,那咱们下面再试一下啊,看一下什么结果,就看这U到底输出什么。各位仔细看啊。因为现在这还有异常了,对它没有屡退,但是我U得到了是不是你的异常信息啊,就是这个零不能做除数啊,所以咱们现在啊,就把这个compable future里边两个异步调用的方法给各位做了演示,一个是异步调用没反应值叫run asy c,一个叫有反应值色派XYC啊所以大家把这两方法给都知道,所以现在E不回调我们做了演示,通过这个过程中呢,大家主要掌握这么几点,第一个你要掌握什么叫同步,什么叫异步,就刚才我举的例子啊,到班上找同学用同步怎么找,用异步怎么找,然后第二个它代码结构中有返回值,还有没反应值的异步调用,这方法该怎么写,特别是这个有反值里边这两个参数到底都是什么含义?
11:15
所以现在啊,咱们把异步回调就最终完成了。
我来说两句