温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
各位同学大家好,接下来我为大家介绍可重入锁,也许什么是可重入锁你没有听过,不着急,但是请告诉我,以大家学到这儿的基础和经验,应该听说过一种思想叫递归吧。那么下面可以看得出。可重入锁又名递归所好,按照这个思想,我们来帮助大家理解什么是可重入锁来。可重入锁又称为递归索,是指大家请看几个同一个线程啊,仅限一个,它自己在外层方法获取锁的时候,如果再进入该线程的内层方法,会自动获得锁,当然前提是这个锁对象是同一把锁啊。不会因为之前已经获取过锁,还没有示范所而被阻塞,那这是什么意思呢?比如说。各位同学,这是我们一段程序的临界资源,我们在这儿啊,有一个object所。
01:00
OK。等于6OBJECT。没问题吧,那么现在谁进来谁收小先持有这把锁好,假如说一个线程已经进来了。那么现在它持有O这个锁。没问题吧,那么现在。不好意思啊,在这段代码里面也有一段同步代码块。但是呢,将将好,它呢和你持有的锁是同一把这个。这个甚至我再进去的时候,里面还有一段。是我们的星空带子同步代码,那么这个时候它持有的锁也还是同一个,那么这样它的意思就是说。只要你第一个线程进来了。只有这把锁进入第二道门的时候,锁还是同一把,不用要求前面的这个立刻释放,它能够自动获得,只要是同一把锁,那么相当于说是什么一个通用的令牌,只要是同一把锁,可以从头穿到尾,不会被阻塞,为什么呀?
02:06
为什么要这么设计?我们试想一下,如果是一个有think修饰的递归调用的方法啊,程序第二次进入被自己阻塞了,那么这个是不是有点闹笑话?那么是不是程序上就出现了作茧自缚的情况?是这样,同一把锁,我第一个线程,我进到第一道门就是它,但是第二道门的时候,这把锁和这把锁是同一个,但是第二道门却不认了。告诉你,请先释放第一把锁,这不扯淡吗?我要从这到这儿才能释放这把锁吧,我的程序它全部跑完,所以说对于同一个对象,在多个同步代码块里面再细细的聚嚼一下这句话,再进入该线程的内存方法会怎么着?自动获得锁不会出现作茧自缚的情况。所以在Java的底层设计。Re lock和SNCH都是可重入锁,可重入锁这样一个优点是可以一电池一定程度的避免死锁,那么大家试想一下,我这进来了,但是又想进去,又想进去,我要等着,我要进第二把。
03:07
就要等着第一把释放。可是我要想。等第一把要释放,我就必须要进入第二把,那么这样是不是就很尴尬,很矛盾的一个现象出现了,那么为了避免这样,那么只要是同步块里面又有同步块,只要是同一把锁,那么进去以后它可以自动获得,哎,这个就是我们可重入锁的一个理念。好,那么下面我们在。按照字形分开来理解一下,可重入锁来,同学们,我们先看一下这个理论,所谓的可就是指可以重代表什么?再次入就是进入所是什么?同步所,那么进入什么呢?进入同步域,也就是说同步代码块或者方法,或者是显示所锁定的这段资源,这段代码,那么一句话。一个县城。中的多个流程可以获取同一把锁,只有这把同步锁可以再次进入,自己可以获取自己的内部锁,哎,这个就是我们可重入锁它相关的理论知识。
04:12
好,那么接下来。
我来说两句