温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java读写锁ReadWriteLock怎么实现

发布时间:2022-01-04 16:06:01 来源:亿速云 阅读:158 作者:iii 栏目:大数据

本篇内容主要讲解“java读写锁ReadWriteLock怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java读写锁ReadWriteLock怎么实现”吧!

读写锁是什么?

读写锁就是分了两种情况,一种是读时的锁,一种是写时的锁,它允许多个线程同时读共享变量,但是只允许一个线程写共享变量,当写共享变量的时候也会阻塞读的操作。这样在读的时候就不会互斥,提高读的效率。

可重入锁是什么?

可重入锁指的是在同一个线程内如果你的外层函数已经获得了锁,那么当你的内层函数也能获取锁,也就是通过一个线程再次进入同步代码块时可以获得自己已经获得的锁,而不可重入则反之。看下简单的示例

java读写锁ReadWriteLock怎么实现

可重入锁这样使用上面代码是没问题的,如果不可重入锁这样的调用是不允许的。

来看看Javadoc中ReentrantReadWriteLock的示例,主要说的就是处理一个获取一个缓存数据的示例

java读写锁ReadWriteLock怎么实现

可以看出使用还是简单的,相对于ReentrantLock来说就是多了个角色区别一个是读锁一个是写锁。

读写锁的升降级

上面代码有提到

Must release read lock before acquiring write lock (在获取写锁前必须释放读锁)

也就是说读写锁不允许锁的升级,不能直接从读锁升级到写锁。如果读锁还没有释放,此时获取写锁,会导致写锁永久等待,最终导致相关线程都阻塞,GG。切记不可这样使用。

但是锁的降级是允许的

Downgrade by acquiring read lock before releasing write lock(通过在释放写锁之前获取读锁来降级)

也就是说在释放写锁之前可以获取读锁来达到锁的降级!

读写锁还有一点不同就是写锁是支持条件变量的也就是支持newCondition。

而读锁是不支持条件变量的,如果读锁调用newCondition会抛UnsupportedOperationException。

读写锁实现了java.util.concurrent.locks.Lock接口,所以tryLock()、lockInterruptibly()等方法都是支持的。

并且也支持公平锁和非公平锁的模式,底层是也是基于AbstractQueuedSynchronizer实现的

到此,相信大家对“java读写锁ReadWriteLock怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI