00:01
各位同学大家好,刚才呢,我们讲完了多线程所的境外内容,那下面呢,我们进入到下一个知识点,给大家讲doc中一个重要的接口叫做口A接口,那这个接口到底是做什么的,下面给各位详细来说一下,然后各位看一下我的文档中,大家注意咱们目前的创建线程其实是有很多种方式的。我们在Java基础部分,各位应该知道创建线程有两种方式,一种方式就是通过继承这个SH类进行实现,这是它的一种方式。我在这个图上给大家写一下创建线程的多种方式。首先第一种方式就是继承这个thread类,然后除了这个之外,我们还有第二种方式,那就是实现这个runable这个接口。
01:03
这是它的两种实验方式,然后除了这两种方式之外呢,我们创建线程,在JDK1.5以后又出现了第三种,包括第四种方式,那给大家写一下第三种方式怎么做,就是通过咱们刚才说这个叫call able接口。来创建线程,包括还有里边的第四种方式,我们通过这个线程池的方式来创建线程,所以这些是创建线程里边的四种方式,而咱们现在讲的这种方式就是通过Co a部接口来创建线程,所以这是我们要讲的内容。而Co a接口有什么好处呢?各位看一下我们的课件中,比如说我们现在通过算在内或者通过run na接口创建线程,当你线程终止之后,那咱就无法使线程返回结果,而这个时候用扣A接口可以得到你线程的返回结果,也就是说Co a接口我们创建线程,它可以有返回值。
02:16
那咱下面就具体看一下这个Co a部接口到底该怎么去用,那我们来看一下。首先咱先看一下API文档中,在Java u con的这个包里边,大家看这个接口叫做Co a接口,然后咱看到首先靠able接口,这里边也写到它有一些相关的特点,那这个接口呢,咱就和这个软able接口做个比较,看两个之间的区别到底是什么。那这里边给各位来说一下啊,咱们来比较一下两个接口。Able接口。和这个扣A接口。
03:02
看这两个到底有什么不一样的地方,那我们来看一下啊,首先我们看第一个,大家看Co a接口,第一个它是不是有返回值,另外这里边它里写到它用的叫扣方法,如果说无法计算结果,它是不是会抛出一个异常,这是靠able接口这个特点,然后咱再找一下那个软内接口,我们来找一下啊。在这个类里边,我们找的这个Java。浪包里边这个软内这个接口,也就是这个,然后咱们看首先第一个这个接口的方法没有返回值吧,另外它不会抛出异常,它的方法叫run方法,所以咱们通过这三部分来做个比较,我来写一下啊,首先第一部分。他们是否有这个返回值,而我们这里边口aval接口有返回值,软ableval接口又没有返回值,另外里边第二特点。
04:06
是否会抛出异常口,Ableval接口,如果说无法计算结果会有异常抛出,但是reableval没有异常。另外就是第三个,他们最终那个实现的方法的名称是不同的,Co ableval接口用的是扣方法,Reable用的是不是run方法,比如说这里边一个是这个run方法。一个是这个。扣方法,所以这个是两个接口,他们一个比较,各位把这个给他知道一下就可以了,然后这个写完之后,咱们写段代码,通过代码把这两个接口的使用,咱们再进一步巩固一下,看一下它们之间的一个区别,那我来写一下啊,比如现在我在这里边呢,我建个包,这个包我就叫。医保。
05:00
然后在口A里边呢,咱们来创建一个类,这个类比如说我就叫DEMO1,然后在那里边咱就来比较一下这两个接口的这么一个区别。那我们来写一下啊,比如现在在里边呢,我先就是写一个类,然后让这个类呢,实现咱们那个软label接口。这是第一个就是咱写的,然后一会儿我再写个类,然后这个类实现我们这个口able的这个接口,那下面我们来写一下,首先我们写第一个类,比如来一个class啊,咱们叫这个my thread。这个一。然后让他实现咱们这个软接口。然后实现之后,因为在软level里边需要咱们实现里边的一个方法,这一方法的名字叫这个run方法,Run方法里边没有返回值,这是第一个,然后比如说我再来个类,咱们叫这个my thread。
06:08
这个二让它实现,这个叫口able接口。这个接口,然后在里边我们也是实验它的方法,这个方法各位看一下它的名字叫什么,是不是这个扣方法,然后这个方法会有这个返回值。比如说这里边object,假如说咱们改一个什么类型,我们来一个反应值,比如说返回200,所以现在这就是两个接口,它们一个最基本的比较,各位把这给头知道。然后这个说完之后,下面呢,咱就具体看一下这个A接口到底该怎么去用,比如我现在想用Co a接口来创建一个线程,咱们看这该怎么创建。那我来写一下啊,比如现在我在里边呢,写上一个问方法。
07:02
咱们先用这个软内部接口创建一个线程。我写一下哈。软able接口的方式。我们先创建。这么一个线程,那我们写一下啊,这个应该很简单,因为咱直接new这个对象嘛,就这个MYAD1,那我在里边直接new上一个叫my rightad1,后面加上你的线程名称,比如说我叫AA,然后加上一个叫star的方法调用,这样的话,咱通过软able接口方式把这线程是不是就创建出来了,这是我们之前写到的,只是说咱之前通过love表式把这简化了,但是我也可以自己写个类,然后把这个创意出来。然后这个创建之后,下面咱们看一下啊,我用口able接口能不能直接改成这种方式,比如说我们现在这么改一下。
08:00
咱们也是new,然后里边上一个MY2这个名字,比如我叫BB。大家看这么写是不是报错了,也就是说你用口able并不能直接替换这个软able,因为这里边没有这个方法,包括各位看一下这个TH这个类,我们来找一下啊TH这个类。应该是这个类。然后你看在S类里边有很多的构造方法,它的构造方法中应该只有这个软able,并没有口这接口,所以你直接替换成口able,这么写肯定是不对的,它就会报错,就这是不正确的。那这么写不对,咱们到底该怎么去写呢?下面给大家详细分析一下啊,首先第一个直接替换不可以,因为这里边构造中没有这个口,那咱们需要怎么做呢?咱需要想一种解决方案,那这方案是怎么样的呢?给大家说一下啊。
09:04
比如说我现在在这过程中呢,咱要创建线程,但是线程里边呢,我们只能写reableable,而不能写口able,那咱们需要怎么做呢?比如说现在我需要让这里边reable来认识我的口,是不是可以做到?那怎么实现,给大家举个例子啊,他就好比说啊,是这么一个过程,比如现在啊,大家想一下,比如现在我想去认识某一个人,那你说你怎么认识。怎么做,咱们一般的方式是不是找个中间人,用这个人呢,既认识你也认识他,然后咱们找他之后,那这个人咱们是不是就能认识,就好比说这种场景,比如现在有两个人啊,这个人比如说是这个叫Lucy。这个人比如说叫Mary,但是现在Lucy想去认识Mary,他不无法直接去认识,那怎么做,是不是找个中间人呀?
10:04
假如现在啊,有一个人,他叫杰克。这杰克呢?D认识这个Lucy,也认识Mary,那杰克作为他们的中间人,让两人认识是不是就可以了?所以这是一种典型方式,而咱目前也是一样的,因为各位知道一个类在Java中能实现多个接口,所以咱们现在我就可以找个类,让这个类呢,既跟reableable有关系,又跟Co有关系,咱用这种方式就可以实现这个线程创建。啊,那我写一下啊,就是我们现在呢,到这个Java中,咱们去找一个类,让这个类呢,可以这么理解。即和我们这个啊,就是G。和这个软able这个接口有关系。然后他又和我们里边这个就是口接口。
11:05
也有关系。这样的话,最终把这过程是不是就能这个实现,所以咱们下面就来找这么一个类,最终把这做到,那这个类是什么呢?咱们来看一下啊,首先咱们找到我们这个文档中,先找到我们里边这个,比如咱先找一下这个软able这个地方。咱看啊,在软微里边它是一个接口,然后这个接口中呢,有它的子接口,包括它里边的实现类,但是各位看啊,在它的实现类中,咱们找到这个实现类叫做future task。大家这单词什么意思?Future是不是有未来的意思,Task是不是任务,这叫未来任务,然后咱们把这个future task点开,大家看里边啊,Task它也实现了软接口,然后在future task中咱们往下看,大家看到一个地方。
12:05
各位应该能看到它的构造中是不是有这个口A接口啊,所以咱目前就发现了里边这么一个关系,那我把这关系给各位来说一下啊,首先我们的关系中的第一部分。我写到这个位置,这里边就是我们的reable接口里边,它有一个实现类,这实现类叫做future task。就是咱说的未来任务,然后这里边在future task这个构造里边。他可以就是。传递咱们那个口able这个接口。所以现在咱就可以通过这个future task建立起来这两个之间一个关系,从而实现出咱们用Co创建线程过程,这叫future task的未来任务。然后咱们看一下这个future task里边我们用它的构造。在future task中有很多方法,咱们找里边的几个重要方法,首先大家看这个方法。
13:13
是不是叫钙的方法,钙的方法就是获取你那个扣A,最终这个返回值,比如我们刚才返回200钙的方法,把这个可以得到,然后在future t中,这里边还有一个方法,这个方法。表示任务是否完成,如果完成返回处咱们才能表达的结果。所以现在咱就找到了里面这个中间的这个对象叫future task,然后咱们通过future task未来任务就能使用Co来创建我们的线程。所以现在咱们把这个过程给各位做这个说明,最终我再重复一遍啊,创建线程有多种方式,包括继承此来的类实现软able接口,另外包含咱们刚才说这个口A接口,还有咱们后面会讲这个形容池的方式。而口able接口它跟软able有它的不同的地方,但是咱口并不能直接替换软able,因为在S类中没有这个对应的构造,那咱需要怎么做?咱需要找一个中间对象,叫这个future task,因为future task它即使软able的时间内在它的构造中又可以传递口接口,所以咱通过这个中间对象filter task,最终能实现口able接口创建线程的过程。
14:42
所以现在这个过程给大家做了一个分析,Future task叫做未来任务。
我来说两句