00:00
好,那么接下来呢,我们来去看一下,呃,第五个所,那么第五个所呢叫inter,然后呢是c for SIM for v2这个玩意儿,那大概呢,是第二个版本的信号量,当然呢,具体呢,为什么加一个V2在后面啊,咱也不知道啊。那么总之呢,它翻译过来就是信号量的信号量的意思,那么它作用呢,跟咱那个的信号量呢,就是类似的,它就是分布式的信号量。那之前呢,我们就举过一个例子对吧?啊,那么咱们比如说呢,我们停车位有限的情况下,我来了很多车,那么停不下怎么办呢?咱们也可以通过信号量啊来限流啊,对车辆进行限流。那么其实我们信号量主要作用呢,也就是限流啊好,那么这的话呢,咱就不再啰嗦了,我们就看一下这个Q的信号量该怎么去玩。那我们依然呢,可以在啊那个的基础上来稍微改一改啊,那的信号量呢,我们可以去翻翻看看啊,那就哪个呢啊就咱这个。
01:05
那么这个的话呢,我们可以把这个方法呀,直接拷背一下,然后稍微改化改吧就可以了。啊,给它放大啊,咱们这个上面去放上之后呢,在这个地方,原先这个呢,给它改成二,那么然后呢,这个呢,是我们K的呃,一个信号量啊。那么咱这里呢,首先一定要以初始化一个Q里面这个信号量啊,那我们就来去初始化一个啊,把这个代码呢,咱们给它删掉,删掉之后呢,我们来去溜一个就可以了,跟其他的那些锁的出装方式呢,都是一样的啊,都是类似的。啊,来有一个inter,嗯,Osisosis让S。你看之前呢,也有一个叫SIM的,但他已经过期了,那咱肯定要使用这个第二个版本的SIM。那么这个里面的参数,它都需要什么参数呢?它主要是由啊这么几个参数组成,首先呢是扣单对象,然后呢,机包路径啊基路径。
02:08
啊,基础路径,那么然后第三个的话呢,其实就是我们这个资源量啊,你要限定多少资源量。好,咱一一呢,给它设置一下第一个参数carry framework设置上去,好基础路径啊,我们可以来指定一下,然杠上los los这样子。那么然后呢,我们的呃,资源量,比如说它依然还是五的资源量啊,就这样写就可以了,那么像最后呢,最终返回的那么是一个c for v2这个玩意儿。那么然后呢,这行代码呀,咱就不需要了,那么之前呢,我们在这个地方来设置资源量的,那么现在呢,我们给它放在这个这个地方了啊,叫max利斯这样的一个玩意儿。好,那我们把这个东西呢,直接给它删掉就可以了啊,那么然后呢,再去看一下啊,咱这个svr里面有没有类似的这种呃亏的方法以及release方法啊,那这是什么?这是获取资源的方法,如果获取资源成功,我们才可以处理这个业务操作,如果获取资源失败了,他怎么办?他只能在这里阻塞着哈。
03:15
好,那么然后呢?呃,等其他人释放掉了,他才有机会去获取。那么获取到之后呢,开始处理业务操作,处理完了我们可以把这个资源给释放掉,让其他人呢进来进行处理。好,那我们来看一下这个svr里边还有什么方法好点上。你呃亏方法啊,也可以获取一个资源,它也叫亏方法啊,那我们就去呃扩一下嘛。好,那么咱就可以把这个代码呢,给它这个注释,要给它放在那么这个地方。啊,把它放在这个地方,那么然呢,这个地方呢,就不需要了啊。然后呢,咱要去释放资源,总去释放呢。好,咱们依然去看一下这个svr里面有没有定的方法啊,有没有release方法呢?啊,没有,它这有个叫list的那个方法。
04:03
那么类或者是or,咱肯定不能or,但一般都是使用类了,以释放当前请求线程所占用的资源哈。它里面就需要一个类对象,那么这个类似对象怎么办呢?OK,那么其实在你亏的时候呀,三角亏是有返回结果集的啊,那么返回结果集刚好是一个类似对象。那么我们在组keep里面呢,哎,你要你要释放的就是你获取的那个类似对象,它最大是五个组约,那每一次你获取的时候呢,会返回一个主约对象。那么然后呢,你去释放的时候呀,你得要释放你对应的这个主业对象啊才可以。那他这呢,搞得就很严谨。那么然后呢,这个异常啊,可以呢,直接去捕获一下啊,咱这里呢,就呃,就捕获那个最大的异常就可以了。好,那么这样搞定之后呀,我们可以把这个东西啊,其实可以给它删掉了啊,那么这个东西呢,也可以给它删掉,对吧,这个代码呢,看起来更加清爽一点啊。
05:07
好,首先呢,我们在这个地方,我们给它改成100,这就10086吗。10086啊,我们可以把这个代码呢,给它重新启动一下。那么启动好之后啊,再把这个改成10010啊,再去重启一次,重启一下这个就可以了,OK。啊,等他冲击好啊。啊,冲气已经成功了,然后再把它改成100。幺零,然后10010,那么这个代码呢,咱前面已经演示过一遍了啊,所以呢,我这里呢,就不怎么介绍它了。啊反弹那就可能就是两个客户端呢,咱在高并发情况下啊,都要去获取资源,但是我资源呢,只有五个啊可能会不够。那么每一次呢,只有五个,五个可以进去,那么剩下那些请求啊,只能等其他人处理好了,其他请求处理好了,那你才能获取资源,那么既然的话呢,来处理业务操作。
06:08
好,那我这里呢,给它改成10010之后呢,那么这个1010啊,我们也需要重启一下。啊,让它重启着,我们在这边的话呢,应该有个lock日志啊,这是咱之前呢,在red里面输出的啊,我们可以呢,把它给清空掉。啊,不要干扰我们,那么切除了之后呢,来看一下log已经没有了啊,他他会给我们输出log日志啊,两个都已经启动成功了,那么启动成功的情况下呀,我们依然去访问这个test SIM这个请求啊。Test SIM就这个吗?Copy过来可能放在我们浏览器的。地址栏这个位置给它扔进去,扔进之后呢,我们来去走啊,F5F5疯狂的去刷新啊,疯狂刷新,好来看我们的red里面的输出结果,我们来去刷新,看一下这个log。
07:04
啊,每次呢,有几个情节可以获取到呢。好,这里我们可以看到啊,呃,咱有几个请求。哎,一个请求吗。获取的资源,然后呢,是处理完资源释放的资源,我是只发了一个请求吗。是不是只发了一个请求,诶,好像不是我们这个请求啊,我刷的都什么right这个所谓请求了,再让它改成那个S啊S。我怎么刷的是那个了呢,要等到刷新完了。那个才能去刷新下一个是不是。我们来看一下啊。那他已经获取了这样一个资源。过一段那个资源,那么这是一个请求啊,把它给删掉。筛选之后呢,我们再去重新刷一下。
08:00
呃,刚刚才刷了半天,刷的是那个毒蝎锁的那个解锁啊好,我们再去刷一下这个信号量,我们来去刷刷刷刷刷刷疯狂的去刷啊,刷完之后呢,还看这个re log日志,那我们可以看到呢,一开始呢,只有五个请求可以获取到咱们这个资源,既然呢来处理处理业务逻辑嘛。那处理完之后呢,比如说呢,咱已经有请求处理完了。咱们可以看一下,因有请求处理完了,释放资源了,那么另外一个请求才可以进去。那么这个呢,是10086处理完了,10086自己的话呢,又会了资源,那10010处理完了10010呢又回了资源,另外一个10010回了资源。好,那我们可以呢,再去看一下,再仔细的看一下啊,一开始呢,是五个进球。五个请求可以进来,那么然后呢,咱10010呢,有个请求先处理完了,然后呢,10086有个请求啊,就可以进来了啊。那么然后10086呢?有一个请求处理完了,另外一个1086的请求又进来了,那么然后是10010,有个请求处理完了,另外一个10010也进来了,那么然后是10086,有一个处理完了,另外一个10010进来了。啊,就这样子,只有当一个请求处理完了,你另外一个才可以进来。
我来说两句