00:00
好,接下来呢,我们学习这个,我们说创建直行线程的第三种方式叫做实现,这个叫做combo接口,那么咱们先回顾一下,在原来我给大家讲的时候,我们说创建执行线程的方式有几种啊,就之前说我们说讲两种啊,对吧,大家要注意,我们说实际上啊,创建执行线程的方式一共有四种,听明白吧,以后面试的话,人家要是面试官问你这问问问你这道题的话,说创建执行线程的方式有几种,那几种啊,那是四种啊,对吧,那我说现在呢,学习第三种,最后呢,我们还会学的线程词,那个就是第四种,听懂吧,那这是要搞清楚啊,那么这个时候呢,我们说先去创建一个包like com.at硅谷点上doc,那就来一个叫做test,靠,对吧。
01:00
看了我们说这个呢,现在呢,我们说这是创建执行线程创建对吧,执行线程的方式三,那叫做实现columnful这个接口,那么首先呢,第一个问题就是我说那这一种实现color接口的方式,跟我们原来使用实现roundable接口的方式,这有什么区别呀?我说原来threatad和roundable,我们首选使用哪个来着,说roundable啊,对吧,那我们现在主要看说comable对吧,跟incredibleable有什么区别,那么呢,我在这里呢,就创建一个叫做class,比如说这个叫做SDEMO吧,DEMO让他去implementment,原来我们是不是这么写啊,实现runable接口,然后实现接口中的run方法吧,那我说这个是原来大家注意看,现在我写一个Co,大家对比一下看看有什么区别,我来个string的DEMO,这次呢,我要。
02:00
那colorable对吧?首先第一点这个colorible是不允许带泛行的,那比如说我现在来个integer,然后呢,紧接着实现了接口以后,他是不是也让我实现里边的抽象方法呀,那么我就实现一下里边的抽象方法,大家对比一下这两种方式有啥区别,自己看,那就是扣住接口这个里边这个方法是不是叫Co方法呀,这个方法所先怎么样,是不是有返回值了呀,并且这个方法怎么样,是不是有异常啊,对吧?我们说接口中指定的这个泛行是不是就说白了是你返回值的那个类型呢?哎,那这就是他们的区别,我们说这种实现高接口的方式相较于任接口的方式,只不过多了一个方法,是不是讨论值啊,并且是不是可以抛出一来来了,我们说相较于,相较于这个叫做实现实现raable接口的接口的方式,对吧,我们说。
03:00
多了是不方法可以有返回值啊,方法可以有返回值,并且可以抛出异常,就这点区别,这没问题吧,对吧?那么接下来咱们是不是就试试啊,那么说有返问结果了,就意味着什么呢?就意味着我们是不是可以在这里高端返问值返回啊,对吧?比如说我们说来个int的sum初始值为零,我计算一个,比如说100以内的一个总和可以吗?说零到100以内的一个总和来,那some加等I的值,最后你就可以return some是吧,这some返回一下啊对吧?那么接下来我们就开始使用,对,我在这里慢慢了的时候呢,我创建一个是不是也创建一个ste,第D等new一个ste是大家注意接下来的使用跟原来run接口的方式就有点不一样了,我们说原来run,你是不是直接来个thad,把这个run实现。
04:00
诶实力传过来是不是就可以了呀,但是现在不行了,为什么不行,因为我们说你看住这种方式说对了成返回值了,所以说那既然有返回值,我们是不是就得多了一步接收返回值这样的一个操作,对吧,所以说你扔,所以说com接口方式需要一个实现类的支持,或者说需要一个叫做future task这个实现类的支持,听懂吧,对吧,我们说执行这个colorful colorful的方式对吧,方式需要叫做一个叫做future task实现类的实现类的支持,当然它是不是得用future task来支持啊,说这个非task是干嘛的,我们说是不是可以用于接收运算结果呀,对吧,运算结果的这能记了吗?对吧,因为我们说考的方式相较于原来对吧用的方式。
05:00
到了一个结果,那这个时候呢,我得有一步,是不是接收运算结果的投入啊,对吧,那这个时候呢,我们说Co需要跟future task一块来使用,我们说future task呢,它是什么呢?它是这个future的实现类,我们说有一个接口呢,叫做future对吧,我们写这个吧,说执行对吧,说执行它的话呢,需要这个是不是它的知识啊,然后呢,我们说future task,它是呢,Future这个接口,Future接口的实现类,看懂吧,一会我们传一下,传参数的时候,再让大家看看怎么是future task,看懂吧,对吧,我传一下参数的时候再说啊,那么这时我们就来,那首先我们是不是得需要它的知识啊,我就创建一个future task future是future task啊,注意它也是JDK1.5comp包装大提供的,那么。
06:00
那返回值你是不是也得有类型啊,指定一个泛型,比如说来个叫result吧,等于什么呢?Ane一个future task,注意看参数能不能传个cable,说不可以啊,对吧?当然也能传一个roundable,我们说主要用这个传一个colorable的实线,那么我们这个TD是不是就colorful的实现,那么紧接着然后将来干嘛呢?将来你就可以用TH把这个result.start启动了。是不启动了呀,启动就说我们说,那你线程启动,我们先先看看这个线程能不能启动啊,我先把这个I的值给它打印一下,看看是不可以啊,我们说线程能不能启动,右键运行启动没有线程是不是启动的呀,但是启动了相较于原我又多了一个什么东西,是不是多了一个结果呀,对吧,相较于原来我多了一个结果,也就意味着什么呢?就意味着我接下来是不是要接收结果对吧?说接收线程运算后的结果对吧?那接收线程运算后的结果的话,那怎么接收,你只需要通过future task,也就是一个result吧,点get就得到结果了,是不get反回的就是danger,对吧,你就可以得到这个结果,当然它说有异常啊,有异常我们也可以给它来个出来看一下,对吧,那把这个结果呢,得到一个的some,得到一个总格,拿到这个总格以后,我是不是。
07:32
这三这下呢,对吧,那这是右键运行有没有是有这个运算结果呀,对吧,上边都是打印的数值,下边就是叫做columnful运算的结果,或者说是比task接收的结果,是不是也可以啊,那么这个时候呢,大家需要注意这么一点,我在这里我画一个分割线,是画横线呢,画个横线,这是什么意思呢?我们说在你这个线程在运行的过程当中,我这个结果的运算有没有执行。
08:04
能听明就是个这个5050,这个结果有没有打印,说在你们线程运行的过程当中,我是不是这个结果5050打没打印呢?对吧,那么右键运行,嗯,实际上我这个横线是不是已经完事了呀,对吧,那这个时候呢,对我线成太快了,我来个00000对吧,是不是多来个几个零啊,然后这样的话呢,注意看我那个结果,这个结果也看不出来效果是吧,我给它放到这来,放到这来可以不可以对吧?这样的话呢,看看效果啊,右键运行这个在执行着呢,这这不好啊,这个也不好,这个也不好,我把这个删掉,大家注意看。嗯,完事了,又完事了,这个也太快了,In这点max value,注意看现在那横线打印没有,横线打印没有,是不是没打印呢?没打印这意味着什么?意味着是不是这一步的结果没有获取,是不结果没获取啊,没获取就意味着什么?意味着当我线程在运行的过程当中,我这个get自行车点get这个操作它是并没有执行啊,那我们说他什么时候会执行,是当上边这个线程执行完了以后,我下边的这个获取结果才会执行,大家刚才也看到效果了吧,所以说这个操作有点类似于咱们之前讲那个什么东西是这锁呀,所以说我们说这个future task它是不也能用于B组啊,对吧?我们说这个值不搞得这么大,我们说它会不会执行呢?对吧?我们搞个这个数对吧,再去右键执行是不是就执。
09:47
能量运算出的总和是不是横线的对吧?然后有的老同学把这调大了以后,发现这里是不是一直等着呢,等着线程执行完,它才是不能直行啊,对吧?所以说得到的这个结论是什么呢?叫做future future这个task也可用于是不是叫做B所是不task也可用于闭锁的操作。
10:11
这里是不是没问题啊,好了,那我说刚才说future task到底是个什么东西,我是不是把future task是不是也可以传给W的,W的这个那个构造器啊,那我就往上点呗,我们看看future task是什么东西,点进去首先它是不是实现了randomable future呀,再点进去它实现了是不是也是这样的,对吧?然后呢,当然同时也实现了future是不是用于一些结果的运算呢?对吧?所以说future task它也是可以用于闭锁的,对吧?那相应的得到的结论就是,那这样的话,相较于原来我们的串型是不是效率也高啊,比如说原来我想计算一个结果,你是不是在中间这一个串行直接下来呀,而现在这么中间是不是来了个分支啊,对吧,你在这里是不是启动一个分线程去帮你运算,然后与此同时主线程是不是还同时再进行计算呢?最后的话,你是不是来个结果的汇合呀,对吧,那这样的话相较于原来效率更好。
11:12
这也能做啊,那这个时候同时分出几个线程帮我做运算,然后呢,这个时候呢,我主线程也在做运算,最后呢,利用result或者说future task的这个get方法,最后来个结果的汇合,因此这样的话也能提高效率,这是这种方式,行了,那这就是toable接口F。
我来说两句