00:02
那为了保证后续我们。自己手写线程池,那么所以说我们下面先看一下。我们自己。一种。新的。获得多线程的方法。那么第三种。好,首先在没讲之前,大家的基础知识都OK。第一种是不是继承词类?第二种,实现接口。但是抱歉。现在。除了有这两种以外。第三和第四。慢慢的用的越来越多。我可以这么讲,企业里面几乎是用线程池,但是第三种有时候什么呢也会被使用,那么我们来看一下。老规矩。Ten继承那个我就不说了,没问题吧,因为继承在实际工作中很少用,大家都是要用实现接口,因为面向接口编程,那么好,同学们。
01:03
Able接口。公公配化,那么直接我们实现了一个run方法。好,这是我们的一式。那么来,同学们。上面这个没有任何问题O吧。那下面呢,请看一下出现了我们的第三个。新的接口。那么就是俗称。以前去年大家一八年学的。现在一九年。喝吧。那么呢,给大家十秒钟观察一下,请看这两个有什么区别。
02:00
那么呢?我们呢?打开我们的API。Interface。宝注意,兄弟们什么鬼?那言下之意,这个两个接口。它们的区别有三。第一个。Relab接口。没有返回值。快报接口。有返回值,当然这个阴气角是因为我这放心写的是这个。你范型写的是什么就是什么。可以这么讲,你现在油行油漆,你再做个支付,这题你答不上来,不会有人相信你干过高并发的接口,因为有可能一一次性银行几账,网上排单,月底对账的时候,他不可能是什么一个接口,一个接口的调账,他是批处理,那么有可能我假设我签签占一批,签占一批次。
03:02
我要求什么?7000个线程不多,那么这个时候可能第996个线程出了错,我要求你给我把这个错误返回来,也就是说我可能需要有带返回值的线程工作内容。那么如果说你说没有啊,我们就是用。那么这个时候,至少这个项目经理我不能,我不能彻底否定,你说你这个技术不好,那我只要肯定会注意你们公司的架构师,我说你们公司做的那套支付结构,难道就没有考虑这种情况,如果我现在起了100个线程。98个对了,那两个错了,那你告诉我那两个错的错误原因什么,你是不是得有个返回值啊。那这个时候如果你没有,他一定会怀疑你们公司架构可能要么很老,要么烂。好,我们一眼。第二个。这个不会刨遗产。这个会剖遗产。要是要这个剖遗产。你100个线程一起来98个对了,那两个为什么错,各自炮独立,不见得他们两个是有可能是犯一样的错,有可能犯不一样的错,同意吗?那么所以说这个时候这是第二点,第三个接口实用的方法不一样。
04:04
一个算,一个括。好,那么接下来这是第三种,那么由于同学们已经熟悉了runable接口,这个轮不到我出手,这个不是我讲的内容了,大家都没问题吧,那么好。那么假设我们就随便返回一个数字叫1024,这个我乱写的啊。来了。我们的问题是。怎么又?这个问题很坑爹。什么概念呢?同学们,你们都明白哈。我们最经典的。Thread t等于6THREAD。我认为这个没有任何问题吧,兄弟们。20。出这个事儿。我们打开我们的Java,烂点thread。
05:07
空构造方法没问题吧?Random接口。Randomable接口。下面没了。你遍列thread的全部构造方法,你会发现没有一个构造方法。是去传。的。那么这个时候请大家思考这个问题怎么办?来,兄弟们。思考了以后。不管结论如何,请跟着老师走。兄弟们,我们是不是一般都是用这个构造方法?大家能跟上吧。好,我们用这个构造方法的时候,请大家眼。什么意思呢?我这要丢一个实现了re接口的,并且给线程。附名字。但问题是。我们现在不是说呀。
06:01
我们现在是可以保,那么照我们正常人的思维方式啊。那我们废什么话?如果我们有这么一个构造方法,是不是万事OK?那说明什么?说明我们一秒钟就能想到的问题。上公司,Oracle公司这些天才级工程师,他们就没有想到他们比我们笨。这个时候你毕业以后应该求职Oracle跟他们讲,我来拯救Java代码。对吧。大家思考一下这个问题。第一种,马上给沃尔克发信。求职信加。自己的项目思考,我发现你们JDK在多线程里面底层的一个bug,居然没有扩张出一个构造方法,填写魁接口。第二种。咱把这个信收回来。想一下。有没有可能?Java从诞生的第一天开始就知道有扩展,人家早就给你想到这些问题了,根本不用有一个多余的构造方法。
07:09
人家就能搞定。你们觉得是哪一种呢?偶尔错了,还是人家设计的太牛逼了,根本就不用扩张就能用。应该是后者吧。好,那么这个时候呢,来吧,兄弟们。好,那行,强哥我懂了,这种是傻逼。回来做出来你咋用,第二个你不说带返回值吗。你现在这叫1024这个值怎么拿。现在我们是不是有两个问题啊。好。来吧。解决实际问题。麻烦了。我们现在来看一下。抬头。昨天我给大家讲阻塞队列的时候,是不是说过,我们讲过一个东西叫构造注入。传接口我还是不是问过你们,我说同学们,我们讲了block queen总侧队列是不是有七种实现,你用哪一种?有同学说说传every list,哦,不是every block。
08:03
或者穿link的。我说过了,这种设计思想,你是不是只能解决一个问题?那我现在变成别的呢?不通用,你没有办法做适配和构造和扩容。那么好。接下来问题是。我现在我们来思考啊,我教的是思想哈,我最喜欢教这种东西,这种深度思考的API没用,那那个都是单的问题。现在来了。我要干这个活。办事。非常抱歉。能进来的。我们懂得。是不是我们的。Runable接口,同学们这一步能不能跟上?可问题是。我现在有的是另外一个接口,那么这个接口是我们的接口。那坑爹了,麻烦大了。我要的是re。
09:00
但我现在有的是魁,我现在问题是你如何思考这两个?接口的适配和勾搭关系。30秒思考。听我讲这个设计有意思是这些你有过这个深度的思考以后,你再去看那些代码,你会觉得,哦,人家为什么要传这样的参数,好自然,像大自然一样自然。来了。我们举先举生活的case啊。再说技术的问题。现在。有两位同学。油画。王帅,投吧。不好意思。现在呢?我就这现场。我默认。接收的参数是王帅。但是现在我要跟游欢勾搭上。你们想一个问题会怎么着?假设AB和。AC2个人。BC2个接口是没有任何关系的,游欢和王帅根本没有任何关系的,但是假设你们两个要勾搭上,想认识你们一定会干一件事儿,说叫找一个中间人。
10:13
你根本不知道防刀。你会找我爱我家的连接中介,现在刘欢想认识王帅,你不好意思直接过去。就如同说今年最火爆的新闻。上周。干嘛?朝鲜帝国CEO金正恩是不是被美国老大特朗普找了个中间地越南?交谈金客会那么一样,兄弟们为什么要传接口?回答我一个问题。接口是否支持多次实现,就是implement后面可不可以挂一堆接口?反过来讲一下,如果我们能找到一个赖,这个赖同时实现了run接口,又。实现了回报接口,这一个类实现了这两个接口,那么我传这么一个类是不是可以解决这个问题?
11:04
这个就是什么适配器模式。我不认识也没关系,我想追一个妹子,我不能直接去追,那我先搞定她旁边的舍友和闺蜜,请她闺蜜吃个饭,把她手机号码先要到再说。那么这个时候一样,那么所以说同学们,Java的设计思想,你千万不要给我写信说不行,你少造了个构造方法。Oracle的意思是面向接口的精髓,你理解了以后,你不用来扩张。眼下之见,我是。Java难点thread设计思想上。我只需要传接口。那么请问如果某一个类。Java是可以有多个类的,一个类可以是不是可以实现多个接口,如果有一个类是既实现了接口,也跟C接口挂上关系,那么我穿这一个类是不是就可以变相的适配了?能理解好,那么所以说兄弟们。这是第一个问题,第二个问题,你现在床装的接口,我们再把这个设计结构拉伸。
12:05
同学们,你们有没有发现一个问题,你们在写代码的时候,你们传接口,一定传过一个接口,叫list接口。你你要有兴趣,你去看一些高级框架的核心底层源码,你会发现。他传什么呢?他传collection接口。什么意思啊?我们反推兄弟们。我这是要传,可以不借口。那你告诉我,我能不能传回接口,我们反推。现在我丢进去这个线程,这个构造上是不是要实现这个接口。那我能不能实现一个这个接口的子接口传进去,假设我要要求你传的是collection接口,但是我传了一个list接口,可不可以?过来。那咋传?这个接口我们熟悉。Lawyer。下面大家请看一下所有已知的什么,直接考一个叫runable future。一个叫什么时间调度的。
13:01
我们现在不需要调度,不考虑。我们不妨看看他。他。回答我兄弟们,这个是不是接口。请问我们要传一个randomable接口进去,由于这个re future接口的老爸是randomable接口,我们变相的传这个接口可不可以?好,解决第左边的分支啊,好,王帅要认识油欢,这一条线先要王帅线认识周阳对吧?第二个分支是不是周阳也要认识油欢,最后哎,两位兄弟,我来给你们撮合,那么接下来请看现在。再来看这个接口。所有已知的什么管实现类,我们熟悉加入的都知道什么swing是Java,是做图形化的a wt swing不用管,那么这个时候我们会看到一个类。已知的什么实现类叫future task,也即task。这个类就是杨哥。杨哥现在已经熟悉王帅这个同学,是不是解决A这个分支了,那么B这个分支尤欢呢?
14:00
大家请看,我们点开future task。这哥们回答我,这个类有没有实现runable接口?好。一半解决另外一半,请看构造方法什么情况入口。有没有点像我昨天讲阻塞队列这种感觉?这个类的构造著作,他可以丢进来一个或able接口,它自己又实现了runable接口,那么回答我这哥们是不是就是杨哥?我穿针引线同时认识AB2个人,可以把你们两个整合。所以说Java就牛逼,在他一开始1.0版的设计,哥们,你一秒钟想到的答案就是你错,你不用去扩容了,我们用适配可以解决这个问题。所以到最后你去看大型公司的那个某一个类,它会implement串串,你会发现,诶,没必要咱们要实现四个接口,甚至更扯淡的什么,其中有一个接口,只有接口的声明,没有接口的实现方法,是个空接口,为毛就是为了混一个身份,这样说可以透传。
15:07
这种思想你明白了以后,你才可以去做架构。很多什么架构师都是跟你噼里啪啦说一半天干嘛说他叫他也是架构师啊,但抱歉。那叫业务架构师,流程架构师,他熟悉这个事儿。怎么做?What,他不熟悉,How,他已经不写代码。所以说它堆出来的系统是肯定有问题的。好兄弟们。那么,言下之见,我们甭废话。Future task走起。好。那么这个时候请看。先过来。Future task来,兄弟们。带不带放钱?好,那么这个泛型是谁呢?这个泛型就是你call able接口,这个泛型建议相同,听懂那么过来。Integer future task等于6TASK,兄弟们报错理由。
16:07
那是不是因为构造方法他跟我说了,你说哥们你得传这么一个东东啊,你看。那么这个时候干嘛呢?My thread。不红了吧?那么言下之意,按照刚才我们的讲解,我现在这一行是不是用了?这一行,这个构造方法没问题吧。好。这是第一步。说明有future task。接触了,可接口注意。Myread是不是实现了可宝接口?好。那你得启动啊。你咋启动呢?New thread还是用第三个构造方法?第一个传的参数,是不是要传一个实现了runable接口的类?
17:00
那么这个类回答我兄弟们有没有实现O了,那么呢?丢进来第二个,这个现成的名字叫AAA。还是跟原来一样啊。好。那么现在同学们假设我这。为了保证同学们的查看。Come in。可以吧?注意啊,这是另外一种第三种线程的实现方法了。我跑。进没进来。首先第一步我们分步学习,第一步这个线程是不是肯定被调用了,如果不调没没有被调用到第13行进不来,同学们是否认同?那接下来那杨哥你不是说是带返回值的吗?我们废话,你告诉我,现在我怎么得到这个1024对不对。那么这个时候请看。
18:00
Future。单从英文来讲,什么意思啊?未来task呢?将来的任务?那么他为什么会出现呢?我们先。摆着这个问题。好。那么接下来甭废话,我们先玩最简单的API层次的使用。然后咱们再说原理,为什么会它会出现,因为面试官考你不是绝对不会考你怎么用,他马上会问你已经有C,哦不,已经有reable接口,为什么要出现C接口?你谈谈它的诞生的前前身背景。你思考过吗?这是技术人员最难的地儿,那么大厂就喜欢考这种东东,不会考你怎么用,你都到这个层次了,我看了你的简历,我也相信你在联动优势啊,你在什么?我们公司干了两三年,你肯定是能干活的主力,那么年轻。但是我们这儿不但是干嘛。要知道怎么能干活,也要知道原理,所谓的什么面试、造核弹,工作、拧螺丝。好了,你面试我为什么要你呢?你要那么高的薪水,2万我们给得起。
19:02
那问题我凭什么给你呢?你得把我打服啊。否则你只是会用,那我找个一万五的也能会用啊,那我多花5000块钱干嘛呢。你这个车你会开,你会不会修呢?这就是底层原理。来,我们先说开车。Out。取咋取呢?但这哥们儿。这个线程运行完了,你要给我个返回值啊,何为返回值啊,返回值是不是要返回给主线程。那么来,兄弟们。那么就是future task。Get方法。好,各位同学请看。有没有?这个线程就是带返回值的,我们可以这么讲,开玩笑的说句,一次性做。千次接口一批次调用,我要求每一个接口给我返回值,成功给我返回0000,失败给我返回4444。
20:02
我要求每一笔账你都要给我返回值。那么这种情况下用的肥贼多。抬头。那接下来我们就要处理一个问题,为什么这个动作会出现呢?简单一句话。并发。一步导致魁宝出来。好回答,我现在是不是API调用工程师你会用了。说说你的整体的通盘考虑,前世今生,我们至少考虑过两个。刚才我教过。王帅和尤欢两个人要勾搭上,是不是要靠杨哥来撮合?我们是不是知道为什么叫面向接口编程,因为你挂上这个身份以后,是不是大家可以透传了?这是第一点,这是一种设计思想适配的模式。第二点。还是我那句话。你玩技术啊,你一定要深度的思考。我昨天是不是讲过一个before after。还有印象吧?
21:00
好。所以比before after就是没有可以比钱。After是不是有与号?好兄弟们。换以前大家是什么单机版的线程。说穿了,去年你们学那些就是个没犯法。只有一个线程,没有线程,那么这个时候什么呢?俗称。一根签子通到底以前的运行方法,俗称冰糖葫芦串。听懂了吗?那么也就是说,假设我没方法里面。有方法,假设我这是个没方法。我这个没方法,里面有M1。M3,你跟我讲,我是不是may进来,主线程1231执行完了,执行二,二执行完了,执行三,OK,顺序执行那么好。这个时候就是我们俗称的什么呢?一根签子同到底。
22:00
冰糖。葫芦串。没问题吧,各位同学。问题是?我们有没有可能出会出现这种情况?这个。要一秒。这个要一秒啊,这个计算要十秒。然后呢,这个计算一秒。总共13秒,OK,好,抬头。1233位同学,包括刘欢四位。你给我算一加到十,你给我算十,一加到20。你。给我算。21乘到32。复杂度高了吧?你给我算31加到40。一秒一秒十秒一秒OK,好。如果换以前都吃过冰糖葫芦串吧,魅县城就是中间那个竹签子。上面有四个山楂,就是每一个方法,第一个一秒,第二个一秒,那只要吃,第三个永远是十秒,你跟我讲单机板线每次到你那卡。
23:06
快算了,我等着呢,哎哟,爽死你了。那么这个时候干嘛呢?我们再模拟。第一个这种堵塞是不好。第二种情况。我们一定经过你高考的时候。你们的老师一定跟你们讲过一句话,兄弟们。高考做题不要愁。是不是先把会做了,做了再做不会的。你不会做的那个,你一堵在那,比方你比较倒霉,那第一题就不会做,第一道选择题五分,你做了两小时,最后你高考数学五分。妈,这事你说坑爹了。好,我们干嘛呢?我们能不能这样,我每次到你这儿我就要卡。哎,要不这样吧。我在等你呢,兄弟。你别这样,算一下。到你第三步。我惹不起你,我还躲不起,我不会做的题我先留着,我先去做,会做的同不同意啊,兄弟们,那这个时候我们出现了第二种分支。
24:05
干嘛呢大哥,由于这个是十秒的。太慢了,每次卡在这,我每次卡在这吧,我就要等十秒,然后呢,下面这个呢,又见不着,要不这样吧。那个王帅。您单独计算。我让你。你看这样哈。这哥们用算盘,这哥们儿用算盘一秒。我单独给你发个计算器。您别这样算。这个板继续用算盘。你装备好牛逼。允许你掀起一个线程。海涛。以前我们的算法。1234。一根竹签子同到底能跟上现在?只要碰到你了,大哥旁边算去看好,我们变成123。卡的时候马上新开一个线程。
25:01
看到没有,我继续去找游欢绕过王帅,王帅你自己在拿计算器算,我先找游欢去拿算盘对账,那么这个时候123到这算完了,我没卡。然后你什么时候算完了,你什么时候把结果来给我,我们两个结果再汇总,这样尽量的避免堵塞,听懂了吗?看好这个这个手势没问题吧。这块我是不是兴起一个线程,那么再来请问我能不能有没有可能兴起四个线程呢?对不对,那么所以说这个时候什么。不要赌高并发,最牛逼的不是枷锁,最牛逼的是什么控制?这个时候就是我让你不赌。比方说现在有一个北京市交通部长说,兄弟们,我做了一点微小的工作,只要我上台以后,北京从来没有出现过堵车,那何止是牛逼了,对不对?那是神听懂了吧?那么好,这个时候就变成什么概念呢?在这儿。非常抱歉。
26:00
这个耗费的。新起一个线程,你看它的名字是不是叫future task将来的任务吗?待会儿再见,那么欧了干嘛呢?这哥们儿。王帅。跑过去这边你单独去做十秒去,我们呢,有点类似于这样。现在以前是123对吧。现在王帅你单独开一个线程,这个线程叫AAA。这个线程就是我们这儿的。AAA同学们能跟上。然后。我们假设。我这儿。干嘛呢?零一这个时候我这等于100,同学们没问题吧?然后呢,假设。我这边。
27:01
干嘛呢?零二等于这个东东没问题吧,兄弟们,那么最后回答我,我可不可以两个result,零一加上我们两个的零二,彻彻底底完成全部结果的综合和处理,兄弟们,这个是允许的吧?那么欧拉有点类似于又回到我们这儿,这个是AAA这个线程,你去得到一个R1这个结果,123,我们不耗时的再得到我们这个R2这个结果,最终这两个相加,可以得到我们一个总的最终结果,同学们这一步清不清楚?那么请看手势啊,最终一句话,就这么一个情况。OK,不堵塞,那以前大每次转到这完事,这就堵现在。走起。最终。喝了。当然这种思想我们后面会讲fo join,分支合并操作,你学大数据,就是什么大而化小,小事化了,把更高无法处理的,比方说一条记录先拆分。
28:07
多少十个100个更小的单位,小的处理最后汇总是不是OK啊,那么它呢,就有点这个意思。那么好。这个时候同学们,我们简单的再跑一下,大家看1024加个100是不是1124了。好,那么这个时候就是我们是吧,回接口相关的最基本的使用。下面别着急。背景原理认识了以后。还是那句话。底层细节深刻的理由。第一个问题。Get。干嘛呢?如无必要啊。建议放在。最后。什么意思呢?兄弟们,我们现在可是一进来以后,我们现在有两个线程。
29:08
两个。现场。一个。是may主线程没问题吧,一个是AAA,也就是我们的这个带着future task线,兄弟们能跟上。那么好。什么意思呢?我们要做的事儿是不是main线程去忙你的启动这个线程。以后。这12出来一个分支future task也去忙你的,我们两个互不耽搁。那么好。Get的意思是什么呢?要求获得。Feel就是应该准确的说应该这样。回报。现成的计算。结果。
30:00
那么什么概念?如果。什么呢?没有计算完成就要去。强求。那么。那。会导致。堵塞。直到。什么动作?他计算完成。啥意思呢?兄弟们,请问我现在这个get,大家告诉我。杨哥是不是放在最后?不服气你姥爷。我现在把它住掉。兄弟们,你们懂的。我照过来好看。这货是不是这样?好,这个是我们的什么呢?内线程单才是放在这儿。
31:05
内线程在这没问题,你start以后,你给我把这个放在最后,也就是我最后再取这个结果,我不干涉,你不要干涉内线程。但是你说我不。我非得放在这个后面紧接着。那兄弟们有没有算完呢?没呢,什么叫没有算啊,比方说这个线程不好意思啊。进来以后。我需要睡两秒钟。也就我这个计算,比方说王帅现在要去算杨哥,我需要两秒钟才能算出来,我这是要有一个算的过程,我们我们的初衷是什么,你去算的时候,等不等,你不等咱们往下走。你什么时候算,你放到最后,就是最后要你的结果,就是给你充足的时间去算,但是现在我心急了,我要去吃热豆腐,同学们都明白心急了,是不是吃不了热豆腐?我他妈不管王帅你算没算完我不管,反正我只要start以后我马上要要。
32:01
兄弟们请看啊。这个线程现在说是主线程。那么好。卖。在这。下不来,你只要提前去取。结果我问王帅,算好了吗?没有了,不好意思,你不问。我们的原则是把王帅放到最后,等他算完了给我们,不干涉我们。第二种是你心急去吃热豆腐,你算完了吗?没呢?那既然我来也来了,我就在这等着你,你什么时候算完?我什么时候走就导致什么阻塞了,听懂。好,同学们,请看效果。我这个get现在是不是紧,以后紧挨着我是马上就要获得结果。好,我这算的计算过程要多长时间两秒?换以前,如果没有这一行,兄弟们。假设我把它放在这儿。
33:03
这个是不是没现场。你start了AA,这个是完帅,王帅,你去算你的券,你算多长时间,两秒钟,你是不是这边这个线程在这算着呢,无所谓,我们这个main线程可以打出来,请看。出没出卖。最后是你看两秒钟以后的结果,相当于说我们的主学主流程先算完了,然后呢,破一回完上就算算两秒钟以后,他算出1024啊,我算出是100,咱们一加是不是1124啊。能跟上,那么下面的问题是,不好意思,你耍流氓。我不管,强行就要获得这个结果。看着。我把这个时间多一点,三秒钟吧,让同学们效果看好一点。刚才这个麦是不是没有被阻塞?好。哈密,可以吧?你看。没宣传。能跟上内县城被堵了,那么这个时候是不是跟我们这种初衷的思想是不是就背离了?
34:02
不推荐,所以说一般我们呢,建议最后。那么换句话说什么?等他什么时候算完了,我们什么时候来取,明白了吗?好,那么这个时候。我们呢,一般呢,希望呢,把我们的这个呢,放在什么东东最后面好。那你说。这多麻烦我,我怎么知道你算多长时间?十秒。20秒,你给个数。最好什么情况?王帅,我们等你,你去算。你走这个分支二级没问题吧。最好的效果是不是?只要你算完了,我们马上取到。那么好。第一种简陋的方法用get。那么第二种。我们呢,简单的来说一下,我们干嘛呢。
35:00
我们可以这么干。WHY?Future。task.isa。能跟上。就问问你哥。算完没?算完了我们再走,下面的事听懂了吧,那么这个时候干嘛呢?那我没算完怎么办?这个时候。回答我有没有点类似于我们前面讲过的自选锁?取个法。我这就wait future task.is大,如果王帅这个线程。没算完呢,兄弟们,现在我选择部分返回什么force?Force在前面加个感叹号取反,Force变成处能跟上那就变成什么?不好意思啊,还没算完呢,我等着听懂我什么时候算完了,我什么时候要直到future task.is star。
36:00
干嘛处处取法,这个是不是变成副,我再跳出循环就过了。那么这两种方法的组合使用就是future task一些关键性的技术小细节。那么呢,你要是粗糙一点图省事,哎呀,只要这个程序也不是特别的精确,就多等一会儿,无所谓,那么尽量的。等他算完了以后去我们get往后放一点,是不是比较把稳,因为你get往前面算,就是没遇到你,我们算着你遇到,那我们算出来怎么办,没算出我等着你。大家都停着,就好比说现在所有同学等着完帅,那这机器启动了以后,我们再演示,我靠,不是不可以,但是大家所有兼职被被等着了。那么所以说。这种是它的另外一种折中的,那么呢,你简单吧,你就尽量的把这个不一定要放在最后,就可以往后面写,就是给他这个,给这个线程更多的时间去计算,同学们听懂了吧。第三点,没完呢,不要着急。这些都是工作中用到的。
37:07
一个问题。AABB几个线程。那么下面我们的问题是,兄弟们。这句话。会被打印几次?思考。现在大家思考了一下,我们刚才知道的啊,我先把这个回退。只要被调用AAA调用了,兄弟们请看。他这个动作A进来了吧,被调用,被调用是不是一定会打出这句话。下面。我们又在上一讲的基础上添了这么一个货。那么这个时候请看。蝶。几次?一次啊,干嘛开涛?
38:02
现在bbb这个县场叫王不帅,他看王帅做的很嗨,那我也要去做,去跟王帅去做同样的。Java没那么笨。他为什么不进去?哥。不好意思啊。你跟他做一样的结果,为什么同样的动作要做两次?我们应该复用,不应该再计算第二次,听懂了吗?能不能理解?比方说现在守号最多的是一加到12。那么好。这个时候的话,一加到12,基本上就是55,这个答案首号已经算过一次了。你们觉得他第二次应该是负右还是再算一次?就这意思。理解了吗?那你说我不,我他妈非要进去了怎么办?抱歉。干嘛?听懂了吗?那么同学们,那么如果说。
39:07
请看我们的效果。哎哎,BB没问题了吧。所以说多个线程来抢一个future task计算结果只算一次算一次。你要想多算,要取多个future task OK,刚才我们是不是AB2个线程都共用一个future task进去了几个就一个听懂,那么同学们请看我们再像刚才这样吗?我们还是。Future task。就跟刚才一样。我跑。你们懂的,我们这个时候只有一个future task AA进来了,没问题。从头到尾请看跟BB毛关系都没有对不对,那么所以说,但是BB这个线程你懂,那么100%是不是BB.start是一个新的线程。但是这个线程用的还是同一个future task,它进去了一次,OK。
40:00
那么这个就是我们第三种获得多线程的方式,为什么讲这个呀,因为下一讲的什么啊,线程池,它的线程也支持同时是两种,要么这个线程池计算有结果,要么这个线程计算没结果,所以说这个绕不开,好那么各位同学下课休息一下。
我来说两句