00:00
各位同学大家好,我们继续,前面我们给大家介绍了可重入锁的理论知识,也就明白了,只要是一个线程持有同一把锁进入到了内部方法,它里面还是同一把锁的话,可以自动获得,不会出现尴尬的局面。那么接下来理论知识讲完,咱们代码说话来。对于说可重入所主要是有两种影示和显示,那它这个是什么意思呢?第一个我们先说我们的size,那么S是加入的关键字啊,人家从出娘胎的时候就给你解决这个问题,那么它默认就是可重入锁,什么意思呢?来。可重复。可递归调用的锁,在外层使用锁之后,内内层仍然可以使用,并且不会发生死锁,这样就叫可重弱,简单来说就是一个S修饰的方法或者代码块,它内部调用本类的其他S修饰的方法或代码块是永远可以自动获得同一把锁的,不会出现偏差,那么为了避免词锁,Java从设计的时候S关键字啊,那么它这个的话呢,就已经是一个什么默认可重入锁,因为这个关键字啊不是由我们所控制的,所以说它。
01:14
称为隐视素,是Java冲量胎就自带的,那么对于同步块和同步方法我们呢都支持,这个叫影视,那么反过来讲。什么叫显示所呢?那么也就是我们的re lock,我们大家都清楚re lock的使用,它呢不是一个关键字啊,它是一个具体的类。我们需不是需要用lock啊,Lock哎,这个需要我们人为的来控制,所以说它需要显示的指定,那么下面我们的理论知识介绍到这,开工。同步块我们先来看一下,那么来,同学们。现在啊,嗯,假如说我们这儿呢,有一个对象。Object。
02:00
Object等于new object。这个尿。我们就T1这么一个多线程,那么现在这个线程来了以后,那object,那么大家都清楚。此时。是不是T1,那么现在进来了,它呢,就是外层调用。没问题吧,换以前大家都非常清楚T1这个线程,他进来了,持有这个O的对象锁,拿拿着这把锁以后进来干活该干嘛干嘛,但是问题是他进来以后,就像我们这样的第二道门,中间这道门也需要是一个同步块。并且是同一把锁,那么此时,那么大家请看一下这个效果。来这个时候。我们这儿就写一个什么,是不是我们的。中层调用,那么以此类推。如法炮制SYNCH,这我们有另外一把锁。
03:01
来,这个时候我们来看。另外一把锁和最外面这个锁几乎是同一个,OK,那么下面外层,中层,内层表面上看它是掉了三把锁,但是其实质而言都是同一把锁,那么这个就是我们前面所说的同一个线程持有同一把锁进入到内部了以后,会不会自动获得锁?那么我们来看一下我们程序运行以后它的效果是如何,会不会产生死锁的现象?好,那么同学们。走。大家请看是不是同一个线程T1T1T1外层中层内层调用,那么这个时候可以重新获得同一把锁在最外面。又进来了,如果你要用这把锁,是不是应该等着做外面这把锁先示范没有,否则这样的话两个就矛盾了,很尴尬。所以在这儿我们请大家看,在一个S修饰方法或同步代码块的内部,调用本类的其他S类修饰的这个东东时,是永远可以得到锁的,OK,好,那么这个就是我们的同步块,好。
04:09
第一个案例我们就给大家先说到这儿,代码呢我们做一下抽取,然后搁到这儿了,以后我们这个呢,就要re可重入。方法OK,就随便叫这么一个名字吧,那么同步代码块给大家介绍完成以后,那么接下来我们来说一下同步方法,那么好,Public。Ized VO。这是一。好,各位同学,那么我现在。和之前的一样。假如说啊,我们现在呢,这个呢是。Coming。那么一号线程是不是就进来了,那么现在按照我们的笔记和要求来。把这段代码呢进行一下。处理和粘贴。记账。带外层使用锁之后,内存仍然可以用,不会发生死锁,这样呢可重弱,那么现在我们呢,M1这个方法,它呢,现在呢要去调一个方法叫M2。
05:10
假设二方法。它也是一个星空的方法。OK,非但如此,我们再用二,再去掉。M3。同学们能跟上吧,那么现在M1它是一个同步方法,那它是不是应该获得所好在这。是他们。那么在这儿,比如说我们这儿就是真真正正的摁的,那么你摁键。你要打出。嗯,这个关键字。可不是要经过M2好,那么现在。和之前的一样,我们在这了以后,M2我们呢也进来了,这个时候M2呢,它呢也是个新的同步方法,我呢要调M3。OK,那么M3。
06:01
我们。没必要再进入M4了,那么现在也看一,那么到最后能不能打出N的M1这段话好,那么大家可以看得出,以前我们前面讲八种锁的案例都知道size获得了以后,是不是同一时间段只能有一个线程进来,那么现在你要调M1。那么二那三我给你连起来好,那么同理,线程操纵资源类。没问题吧,来吧,我们的T1这么一个线程,这个线程调的是哪一个,就调M1,来同学们,我们Lee看看我们的推论是否正确。来,同学们请看。T一进来了,T一进来了,T一进来了,最后T11这个方法结束了,从头到尾怎么着有且仅有一个线程持有同一把锁,哎,所以说请大家要注意同步块和同步方法,那么就是我们这样相关效果的演示,OK,好。
我来说两句