本篇内容主要讲解“java读写锁ReadWriteLock怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java读写锁ReadWriteLock怎么实现”吧!
创新互联的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括网站制作、网站设计、电商网站开发、微信营销、系统平台开发。
读写锁就是分了两种情况,一种是读时的锁,一种是写时的锁,它允许多个线程同时读共享变量,但是只允许一个线程写共享变量,当写共享变量的时候也会阻塞读的操作。这样在读的时候就不会互斥,提高读的效率。
可重入锁指的是在同一个线程内如果你的外层函数已经获得了锁,那么当你的内层函数也能获取锁,也就是通过一个线程再次进入同步代码块时可以获得自己已经获得的锁,而不可重入则反之。看下简单的示例
可重入锁这样使用上面代码是没问题的,如果不可重入锁这样的调用是不允许的。
来看看Javadoc中ReentrantReadWriteLock的示例,主要说的就是处理一个获取一个缓存数据的示例
可以看出使用还是简单的,相对于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怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款