00:00
好,那么接下来同学们。按照咱们的面试题。这三个确确实实是工作中经常使用的高频工具类。尤其是线程排序这样的动作,甚至你可以什么灵活使用了以后。干嘛做哪些解哪些,到了咱们再开启主线程,后面的任务补上来。那么接下来我们学第三个类。Simone信号灯。信号量。那么好。一句话讲明白。干嘛呢?就是三个字。占车位。讲完了。好,来,同学们抬头。我们模拟这么一个场景,这个非常重要啊。它是可伸缩可变化,其实哈,在Java go UC多线程里面加锁的方法很多,SYNCH的。Look read red lock。第四种方法就是这个新。小米的这个秒杀系统里面大规模使用的这个东东,它非常的限流和控制上面非常爽,尤其做支付接口,我现在假设去年的时候呢,干嘛呢,出了一件事,拼多多被人撸羊毛了。
01:06
薅羊毛呢,四分钱换100块,这种发财的机会你们应该没有错过吧?这有什么响啊,什么头天晚什么麻将都可以不打,先过来写个postman自动高频发的调用程序,还掉它的接口啊,四分钱换人民币100,这事我相信,干嘛只死一次不可透过,听懂了吗?这不用讲,反正拼多多钱多是不是好,就当他精准扶贫对不对好。那么这事呢,我们过来这么说一个。从我们开始学到现在,同学们去年学的都那个干嘛?因为上过五个课程,都知道是分两部分,一个是前面的基础,别的老师讲后面,到高级是我讲前面,大家学卖票的时都有一种感觉什么?你所有学生都是什么?多个县城抢几份一份资源。有没有这种感觉?那么接下来问题是什么?不好意思啊,我多个资源抢多份资源,你怎么控制?这个控制比孙空更难。
02:00
那么什么概念呢?已经马上学校鸿福科技园下面停车位总共有假设20个,那不好意思啊,今天开进来的车有30辆,你回答我是不是必须得有十辆车抢不到车位?能跟上,明儿早上小米九干嘛?秒杀。放出来1000部小米九手机,比市价平均平均便宜了99块钱,你跟我讲你疯抢多不多?那不用说,那是不是可能上万个。客户端的请求去抢99部手机,好,他可能就限时那一秒,那一分钟降价,然后马上打回去,他经常干这种事儿,那就变成什么多个线程去抢多份资源。那么好,这种情况下,就跟刚才的抢停车位,我们要模拟一种什么事呢?第一种没什么话好说。20个停车位,30部车滚。那十个赶走。可以,你限流,你限流的时候你一刀切,为了保证系统不被冲垮,你可以这么干,但是万不得已,你是不是不应该把人家赶走啊?
03:06
那么外面车干嘛?经常我们看到,如果你去某个旅游景点。停车车位已经满了,后面的车是排着队,最常见的一种情况是不是走一辆进一辆,走一辆进一辆,一减一加一个退一个进,一个退一个进,同意否?那么好,西佛就干这个事非常重要。这个工具类。而且它是什么,它可以代替什么?星和洛克,为什么呢?因为如果信号灯。它的初始化参数你设为一,就变成现在鸿福科举啊,只有一个停车位,那你跟我讲有30部车,相当于说是不是30部线上来抢一个车位,这种是他写成一的时候,不是相当于退化成synchize。能理解好,那么同学们理论讲完,咱们开工。两目的。叫信号灯,也叫信号亮哈,你叫哪个都成。
04:00
多个共享资源互斥,我们讲过了,现在就是六部车来抢三个车位。多对多不用讲,一定牵扯到协调互斥,同意否,我们要么就是把那三个多余的砍掉,不好意思啊,你们白来滚。第二种,兄弟,别走,等着吧。我们今天去海底捞吃火锅。就算里面用客区,用摊区满了,后面外面有候客区,只能是等着,都见过这个场景吧,没有见过哪个大摊经理把我们轰走。那么最后这满。是不是走一桌进一桌,走一桌进一桌,这个场景大家可以脑补吧,那么好,那么接下来干嘛呢?一个是共享资源互斥,一个用于并发线程数的控制,那么好,我们来来看看。我们的什么东东呢?西,那么欧拉找到它信号灯。构造方法。两种。行,Fire,我们讲过,这什么意思啊?我们到陈。
05:01
是公平锁和非公平锁,那么记着哈,Snchize和lock不写默认底层源码会给你加个force,默认就是非公平锁,非公平锁效率高,为什么?因为它允许你加三,他是耍流氓,我能加三,加不到了我就插队进去,加不到我再变成,我再变成公平锁,听懂,所以说这一块干嘛,这个布尔值是公平非公平,那么我们。干嘛呢?前面讲过,现在我们假设我们用这货。那么它的使用呢,干嘛呢。我呢,直接呢,节约时间。写好了,哎,这行代码我就不写了,听着啊。来,兄弟们,三个停车位,几部车啊?那是否认同总有三部车抢到,总有三部车抢不到?那么好,我们现在就是属于什么呢。都让每个人读一次。先抢到的。你先用着没抢到的外面等着,就跟今天我们看电影流浪地球第一场你抢不到,你第二场是不是可以去看,你不能说把我后面第二场的全部给废了。
06:06
那这不合适,我们过来。我们现在模拟。你们干嘛呢?他。开抢那么好六个车子。不拿那个快捷键了,这样吧。来,同学们。那么这边我们的。Ma。什么叫战呢?那么这个时候它有两个方法非常重要,其实它有点像GDBC的什么。Open session。和second close。那么。第。Acre。炸。如果这个方法执行成功,那么好。我的习惯呢,快开始。
07:02
Finally。什么意思呢?现在只要你打出这一行,是不是代表一部车已经占到这个车位了?注意,现在我们是多对多,多个线程抢多份资源,六个车想抢三个车位能跟上。那么接下来请看。然后这个时候什么呢。那么呢,抢。抢到车位。同学们,没问题吧?那么接下来干嘛呢?他停多长时间呢?我们随便。好。假设现在。这个车子他要停多少时间呢?答案呢,我不知道。我们假设每个车停三秒能跟上,现在六个车抢,三个车位刷。这六个车不一定是123,可能线程编号是134,听懂,每个车进去停三秒钟,三秒钟以后。
08:04
出去,出去以后你跟我讲这个资源是不是被释放了。那么后面没抢到的马上填进去,填car,这么说听懂好,那么各位同学老A块抢到车位,那么这个时候干嘛呢?这个停了三秒钟。弄过来。干嘛呢?停车。三秒后离开车位。听到。没问题吧?我先抢到车位,停三秒,三秒以后我启动车走出去。但是注意。Acquire是抢占。西莫夫最牛的地方是什么海?刚才我们讲了,看lunch和c bar,它是不是循环计数以后,一个加加加加加,一个减减减减减。什么概念,他无法复用。
09:00
啊,这个货什么概念。兄弟。六个车抢三个车位,我不可能凭空多出来三个车位,那这个时候是同样一个资源给多个人用,你抢完了以后。快入场。但是你走的时候,你必须示范,要告诉SIM这个数字干嘛又恢复上来听懂。看lunch是不停的加加加加减减到零,C是不停的加加加加加加到你规定上限素,但S是什么?有减就会有增,有增就会有减,兄弟们,第一个线程进来我占不占。占不占?三去掉一个是不是只剩两个车位?第二个过来,第三个过来,直接从三减为零,这个时候大家是没得玩了,但是三秒钟以后,抱歉。SM。说走人,这个时候你需要什么release释放你这个停车位,听懂了吗?那么这个时候干嘛呢,同学们。我们来看。六车抢三车位。我们。
10:02
搂一眼我跑。312抢到车位,停三秒钟。二。你看三,只要你二离开被堵塞那些线程根据CPU的线程调度,马上是不是又去抢了,大家请看第一轮是123,第二轮那是不是就456,你看哈二。停车三秒后离开,只要你这句话一打出来,Finally release1犯,SIM是不是从零就变成一了?车位空多出来了一个,空闲的一个,外面排排队的那些就根据CPU调度,哎哎,兄弟们别走,这块已经刚走了一桌,你们过来吃吧,我们是不是马上填上?就跟海底捞火锅一样,那么所以说。这种情况下。干的事情是什么呢?你极端的情况你可以这么玩。呃,以前的玩的那个挖红包砸金蛋那种多线程并发程序,他在这儿这个随机数干嘛给你写new run。
11:00
然后呢,你呢,在做随机砸的时候,有可能兄弟们,我这是固定是不是停车三秒后离开。我们干嘛呢,赌一把。你没发现每一个人的那个玩那个微信的那个转轮哈,它那个是随机时间,你随到的礼物,他不见得每个人都都么转三秒钟听懂了吗。那么它是一个随机时间,可能你刷转一下划出来个奖,刷转一下划出来这个奖,那么像这种情况下干嘛,它那个奖奖券能不能复用C就可以拿过来,相应的控制和判断。好,那么这个时候干嘛呢,我们的西诶。对于信号弹。六个车抢三个车位各种什么?它是不是跟前两个不一样的地方,就是它会有伸缩线,用完了变成零,然后慢慢的又回来,六个车都用完了,这个停车位都空了,今天晚上车停车场的车全走空了,那么它的值是伸缩的。一个减一个加一个伸缩,这三个组合池来运用,结合我们下午要讲的线程池啊,它会打造威力非常功能强大的是吧,高并发系统,这就是底子,如果你干过的同学,今天有来干过的,你用过NIO和IO的,一定有用过一个技术叫net ne TY,它底层这种就是什么多种思想的综合运用,其实都说说穿了,那么说白了什么概念?
12:15
Double的底层是RPCRPC的底层干嘛?又是什么NIO,那么这边的话又是什么,我们底层来提,其实说到最后什么永远学那1/3不变的,没有那么多新技术,他妈全他妈扯淡了,换个名字就后来忽悠人了,不然的话书书书本厂商怎么卖书呢?那么这个时候呢,我们这些不变的学会了,那么对于大家的内功的增长非常有帮助,好,那么各位同学我们呢,这一讲就先到这儿。
我来说两句