00:00
各位同学大家好,我们继续接下来给大家介绍。有没有比读写锁更快的锁,也就是我们的第四图邮戳锁也版本锁,也称票据锁闪亮登场。好回顾历程,无所。独占所。可重入的读写锁我们挨个挨个给大家推过来,尤其在第三步的可重入的读写锁。那么一体两面。读写互斥,读读共享,我相信给大家说的是清清楚楚了,那么对于我们的所降级问题,也是我们上一讲刚刚完成的内容,重点细致的给大家进行了官方的原理,也展现了对应的文档,那是Oracle公司所写的,对吧?那么好,按照我们的心历程,那么接下来我们就来看看。就跟爬楼梯一样。对吧,为什么现在我们1234啊。
01:03
引出了我们的sta block邮戳所同学们注意,它是跟所饥饿问题相关所。优化和导致的,来吧,老规矩理论实操小总结,那么看有没有比读写锁更快的所。那么无邪索更快,那么反过来讲就是他。又有哪些优点?那么读写索又慢在什么地方呢?来吧。流产无所独占所读写锁邮戳所。1234爬楼梯过。首先它是什么?那么对于这个是JAVA8中新增的一个注意。读写锁,你可以把它理解为什么。可重入的读写锁就是I lock。接近于就是我们的爱加加,它是对JAVA5中出现的可重入的读写组的一种什么优化,那么它呢,叫优戳,也叫票据,也叫version版本有点类似于我们前面学原子类的那个ABA问题,那个带戳的一个锁。
02:10
OK,切,切记,Stamp戳记它是long类型的,那么它是代表了一种锁的状态。当STEM返回零的时候,表示线程获取所失败,并且当示范所或者转换锁的时候,都要传入最初获取的三值,那么意思就是说我现在加锁的时候会产生一个流水号,我加锁用这个号加,解锁用这个号来解,那表示同一笔账,同一笔流水,OK,那么来同学们。它大致是什么概念?两个。书穿了,还是一个可重入读写锁的升级优化版本,那么第二个就多了这么一个什么戳记标签,好,那么这两个小概念明白了以后,我们来说一下它的来龙去脉怎么引出来的。
03:04
来。首先何为所饥饿问题所见及。讲完了,那么下面所饥饿,那么它引出来了我们的第四个好,那么来,同学们。大家请看。根据前面我们来说过一个非常细致的。结论。读没有完成的时候,写锁是无法获取锁的,就是人家在读的时候,你写锁写不进去,必须要等着读所读完以候才有机会写,没问题,这是以前我们可重入的读写锁,它明显深刻的特点,也挺好用,也很安全,但是有一利必有一弊。假设我们这个可重的读写锁实现读写分离,一旦读操作比较多,那么想要获得写锁的操作就比较困难。1000个县城,极端一点的情况哈。999毒一个写,那么可能999个读取先生长时间抢了所,都是毒所在强盗,那么那一个邪所就悲剧了。
04:07
因为当前有可能一直存在着读索而无法获得写锁,那这个时候根本就没有机会写,所以说有这个问题了以后,我们就要来想一个问题。想一个解决方案。请看读没有完成的时候,写索是无法。获得的,那么也就是读的时候不让写所进导致饥饿,反过来逆向思维,假设某种状态下读的时候。写所也能写呢。OK,好,不然我们带这个问题往前走。首先,怎么一定程度上来解决这个所饥饿问题?使用公平的策略,可以一定程度上什么情况缓解,啥意思啊,我们大家都清楚,一般啊,我们呢,都是可重入读写锁,跟我们的可重入锁基本上在这个里面都是空的,以吞吐量优先,而不是以公平优先,这个从一定程度上能够缓解。
05:02
但是公平策略是以牺牲什么系统的什么呀,吞吐量为代价为代价的,以公平了,并发性吞吐量就下降了。那么现在我们做。高并发多线程的程序,我们是以吞吐量高性能为主,那么接下来我们来看看,所以呢。只好另起炉灶,新来了一个类,原来JAVA5这个没办法搞定,所以JAVA8开始出了这么一个类,它以乐观读索的方式闪亮登场。好,那么为什么说他闪亮呢?是这样的。对于我们传统的可重入的读写锁。那么允许多个线程同时读,但是只允许什么一个线程写?在线程获取到写索的时候,其他写操作和读操作都是被阻塞,就说你没办法给我抢,我们都知道吗?这张图也画过。只有读,只有读,读是可以共享的,其他只要有写的全部排斥,对吧?所以读写所互斥,在读的时候也同样不允许写,读写所比传统的同步所速度要快很多,原因就在于可充的读写所支持什么读并发,读读可以共享,前面讲过,那么。
06:14
这个就来了。它的痛点优化的部分就是。可重入的读写锁,它的读索被占用的时候,其他线程尝试获取写索的时候拿不到,我们这儿前面详细讲过这句话,不再重复啰嗦,不再赘述了,所以说我们这儿就获得。如果说按原来的你走不通了,那么现在我们要优化,只好另起炉灶。干出来一个邮戳锁,它采用什么乐观获取锁,其他线程尝试写锁的时候怎么着不会被阻塞,就是我很乐观。我认为呢,就是。我在读的时候不会有人改。OK,写我在读的时候,也就是我在拿到读所的时,也允许其他线程去写,那么这样的情况下,并发量当然是不是更上去了,那么这个就是对原来传统的原车它。
07:04
Read read red的一种读索的优化,所以在获取乐观所之后,还需要对结果进行校验,说人话的意思就是我很傻白甜,很乐观,短时间内我这个读所很快,我认为呢,写锁不会进来,那就算是写索进来了,没关系,我也不阻塞,你改就改吧,那么我去读的时候我来进行对比,如果发现我在读的过程中有写索进来改过了,那么我本次的读取作废,再去取一次,再读一次就行了,那么这样的话,我就保证我读的时候。写索也能获得,OK,这个就是对他的一种优化,好我们所说一句话。对于短的只读代码段就是很短暂的时间这样读的,使用乐观锁的模式通常可以减少征用并提高什么吞吐量,这个就是我们的三特洛,它的。前因后果、来龙去脉。以及对我们。
08:01
可重入的读写所得优化。OK,所以说这个就是它出现的意义。
我来说两句