00:00
各位同学,我们继续通过前面的讲解,已经清楚了16个绝对,绝对不要用非常笨的学习方法啊,挨个挨个学学东西,方法和思想非常重要,举一反三,触类旁通,抓典型,找模板,做抽象。一个点引爆了以后打倒一大片,好,那么同学们先来第一组基本类型,原子类来代表的就是它,我相信对它大家应该不陌生了,那么原子整形,原子波形,原子long型,那么它们三个归为第一组常见常用的API,我相信兄弟们也不用我挨个挨个介绍,从构造方法到我们日常用过的,我就不在这带。不再带着大家挨个挨个的过,一看就会,所以说我们呢。就把常见常用的API都已经整理好了,哎,日常用的就这么几个,我工作中用的也是这么几个,够了,其他的你再自行去查API,比如说最经典的就是它,对吧?那么希望值要等于的话,那么就修改方式OK好了,那么同学们这个呢,不是重点,重点呢我们来看一个案例,那么接下来我们呢,通过这个案例来完成一个获取我们高并发数据时候的一个常用方法,那么我们要介绍一个新的工具类,Can lunch OK,好,那么话不多讲,代码说话,顺便通过它来给大家说一下第一组原子基本类型的常用操作,到时候源码发给大家的时候注意学会区分,那么来我们现在都清楚,如果类似于对于爱加加这样的动作,我们是一定要用。
01:36
S加锁或者洛克洛克,那么现在如果我们不想用,那么最经典的我们auto in加,那么6AUTOM in加,那么大家都清楚,你点开可以看得出默认初始值是不是零啊好。那么对于他,我们呢,来一个爱的plus plus这样一个方法,那这个里面就多了,那么不管你是当啊。
02:00
比较并交换获得当前值增加,再get还是get在增加等等等等都一样,那么自己呢,学会调用就行,那么好,我们现在比如说。这个呢,就是获得了以后再增加加几,每次加个一好了,这没有S代吧,来吧,我们现在啊,代码该写的先写好,我们这个默认我们的50个线程来进行操作,常量是它,那么来吧。干到这儿。这个呢,是我们的size没问题吧,好,线程有了,那么线程要操作什么?是不是老规矩,我们的小口诀线程操作资源类现在是my number这个类里面有我们的奥m in这个对象,好了,那么它干一件什么事呢?那么50个线程。每个线程呢,对我呢,操作1000次,我要干一件什么事,那么爱的plus plus,那么是不是类似于我们给他累加呀,那么52。
03:00
乘以1万。哦,乘以1000是多少?我相信这个呢,不用我多废话,那么来,同学们。完火以后。我们搁到这儿。Result,那接下来那么这个线程是什么意思啊,就是我的初步想法呢,是50个线程,每个线程加1000次啊,最后的值应该是得到5万,完了以后我希望此时内线程啊,来获取这个结果的时候,我们应该获得我们my number这个对象里面这个奥。In这个属性,它get应该得到多少?OK吧,那么此时大家思考一下,我们这个程序没有加SYNCH,现在我就马上要获得我们最终结果,会不会等于我们的设想能够拿到5万这个数据呢?那们大家露一眼。多少?48000。好,再跑一次。49000,好,我们再跑一次。46000。
04:00
202,那么请问。我们的问题来了,是不是我们的程序有什么问题?好,大家可以思考一下两秒钟。好,首先我们这个计算绝对不会错。大部分的代码都是调用我们的原子操作类的最基本的原子数据,OK吧,这个我相信大家没有任何疑问,可为什么我们来取的时候没有到5万呢?理由是这个上面这50个线程还没有计算完成的时候,我们这没线程就来看这个结果,那么他查看的不是最终结果,只是你检查这个时候的结果,所以说我们现在要达到的目的必须要。等待上面50个线程全部计算完成后。再来再去,获得最终值。OK,那么所以说我们这要等上面计算完成,一般最经典的,那么弟兄们,如果说你要是懒的话,我们这儿就一秒钟行不行?好,那么接下来那么两秒吧,两秒钟50个线程,1000次的计算,对吧?没有任何问题,我们看你在上面慢慢算。
05:11
我没线程卡在这儿,等你两秒钟算完,我过来取,大家看是不是就是50乘以1000,刚好数据是5万,没有任何问题吧,我们再跑一次,OK,好,那么同学们。这个计算没问题,但现在牵扯一个编码过程当中的小细节。你怎么知道这是两秒?到底是两秒,是一秒还是三秒,那么多了我受不了,少了它还没算完,那么这样是不是导致我们的程序运算结果上有点不和谐的因素啊?所以说日常教学或者是你自己做案例的过程当中,用这个方法是可以的,但是实际到大厂到公司里面,你敢用这样的方法去写,那肯定是要被骂死的,那么所以我们这儿,我们这个案例除了带着大家讲解一下最基本类型的原子操作啊,代表作就这三个,重要的是给大家说一下看lunch在实际工作中的使用,那么来回到这儿,我们最希望的什么,你也别让我在这干等。
06:09
等的时间长和等的时间短对我们两个计算过程和获取最终结果的过程都不友好,我们最希望的就是什么?你上面50个线程。只要一算完了,马上告诉我最终结果,那么这样的效果是不是最爽啊?哎,所以说我们这儿呢,希望呢是50个线程。那么。每算一个我们就少一个,每算一个就少一个,50个线程全部完成了,汇总出最终的结果来,再让每线程来取,获得我们5万这个数字,那么这个时候对于这样的一种设置,这样一种诉求,我们呢,可以用一个什么样的方法呢?那么答案就是我们的看,当lunch好,那么再说一遍,日常工作当中,你自己学着玩,可以用这样的方法,生产上不要这样停顿两秒啊。所以呢,我们在这儿妙看lunch,那么来size,那么也就是模拟我们这有50个线程,它们都算完了,我们再得到最终汇总的结果。至于看到烂池是什么,怎么个用法,我认为你是懂的,我就不再再啰嗦和赘述好,那么在这我们的意思是线程有几个?
07:17
50个,所以说我们这儿看它lunch尺就是50 50个都算完了以后,因为每个是算1000下。那么都算完了以后,我再看结果,所以说搁到这我们要求呢是try finally,那么来这是50个线程,你呢,第一个线程进来,这要做1000次,你看这是循环吗?加加加加加,可能线程进来切换。我随便说加到756次的时候,这个线程可能就已经被挂起,别的线程又去做了,对吧,那么所以说在这一定是等某一个线程。彻底完成这1000次计算以后,我们才能减掉,所以呢,在finally这每个线程完成一个,我们就减一个,一直减,从50减到零,所以说在这儿我们呢,就阻止内线程继续往下去获取数据,意思就是说内线程你卡到这,必须要等着我这个size can lunch里面从50变为零了以后,我再给你最终结果,那么大家请看,这个时候我们就不会因为时间的估算而产生难受的感觉,一句话,你上面算完了,下面就有,好,那么同学们我们来跑一下,看看还用不用等两秒,那么此时。
08:24
大家请看,不用在这写折腾,是两秒一秒还是五秒吧,一句话,你要这么干,所有线程你给我个数,这个线程数就是这个size,全部都算完了,最后的结果该是什么就是什么,平时没算完,卡在这儿,最终算完了给我结果,大家请看,这样是不是不用再去等。这样不确定的时间又耽误事儿,又浪费系统资源,好,那么同学们,我们在这儿主要是用t sleep,不要在睡眠了,用can lunch来给大家进行时间的分解,好那么这个后面我们会用得到来做我们的接口上性能的测试,所以说在这儿给大家先做一个伏笔,OK,那么弟兄们,其他工具类。
09:06
API的调用我们就不再啰嗦,我相信基本原子类型大家应听到这儿,应该能够拿下好第一类,我们就以它作为突破口,给大家介绍到这。
我来说两句