您的位置 首页 > 德语词汇

stamped是什么意思?用法、例句,一个带有邮戳的锁StampedLock(jdk1.8出现)

大家好,感谢邀请,今天来为大家分享一下stamped是什么意思?用法、例句的问题,以及和一个带有邮戳的锁StampedLock(jdk1.8出现)的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

jdk1.8真的可以作为一个宝藏,随便一个新的特性都足以写一本书,今天分析一个在jdk1.8中,引入的一个新的带有邮戳的StampedLock。这篇文章主要从使用的角度来分析一下:

任何一个新引入的知识都是为了解决以往系统中出现的问题,否则新引入的将变得毫无价值。我曾经写过一些关于ReentrantReadWriteLock,ReentrantLock和synchronized锁的文章。如果你之前了解过这些锁或者在工作中使用过,你会发现他们都有各种各样的缺点。

stamped是什么意思?用法、例句,一个带有邮戳的锁StampedLock(jdk1.8出现)

比如synchronized不可中断等,ReentrantLock未能读写分离实现,虽然ReentrantReadWriteLock能够读写分离了,但是对于其写锁想要获取的话,就必须没有任何其他读写锁存在才可以,这实现了悲观读取。而且如果读操作很多,写很少的情况下,线程有可能遭遇饥饿问题。

饥饿问题:ReentrantReadWriteLock实现了读写分离,想要获取读锁就必须确保当前没有其他任何读写锁了,但是一旦读操作比较多的时候,想要获取写锁就变得比较困难了,因为当前有可能会一直存在读锁。而无法获得写锁。

这时候怎么办呢?于是在jdk1.8的时候引入了一个新的锁StampedLock。

StampedLock控制锁有三种模式(写,读,乐观读)

(1)写入(Writing):writeLock是一个独占锁,也是一个悲观锁。

(2)读取(Reading):readLock这时候是一个悲观锁。

(3)乐观读取(OptimisticReading):提供了tryOptimisticRead方法返回一个非0的stamp,只有当前同步状态没有被写模式所占有是才能获取到。乐观读取模式仅用于短时间读取操作时经常能够降低竞争和提高吞吐量。同时使用的时候一般需要读取并存储到另外一个副本,以用做对比使用。下面干脆使用代码来实现一下这几种锁的实现。

悲观写的意思是,认为写多,遇到并发写的可能性高,每次去拿数据的时候都认为别人会修改。

注意到,这三块都是在同一个类中,为了演示方便就这样分开描述了。在运行测试的时候我们会发现,读的线程比较多,但是写的线程比较少,因此读锁执行的概率比较大一些。整个流程是先写数据,然后再读数据,在读数据的时候不会执行写操作。我们来实现一下第三种,那就乐观读取。

这时候我们定义了一个新的乐观读锁,意思是在读的时候,依然可以写入。再次运行的时候你会发现这次写操作会比之前的测试次数多了,这说明在使用乐观读的时候,也发生了写操作。

StampedLock的调度策略对待读写操作都是公平合理的。所有try方法都是尽最大努力,调用可能会成功,也可能会失败。这个类没有直接实现Lock或者ReadWriteLock方法,源码中是把他当作一个单独的类来实现的。当然,一个StampedLock可以通过asReadLock,asWriteLock,asReadWriteLock方法来得到全部功能的子集。

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023