通俗易懂读写锁ReentrantReadWriteLock的使用

网站建设4年前发布
13 0 0

ReentrantReadWriteLock不知道大家熟悉吗?其实在实际的项目中用的比较少,反正我所在的项目没有用到过。,ReentrantReadWriteLock称为读写锁,它提供一个读锁,支持多个线程共享同一把锁。它也提供了一把写锁,是独占锁,和其他读锁或者写锁互斥,表明只有一个线程能持有锁资源。通过两把锁的协同工作,能够最大化的提高读写的性能,特别是读多写少的场景,而往往大部分的场景都是读多写少的。,本文主要讲解ReentrantReadWriteLock的使用和应用场景。,ReentrantReadWriteLock实现了ReadWriteLock接口,可以获取到读锁(共享锁),写锁(独占锁)。同时,通过构造方法可以创建锁本身是公平锁还是非公锁。,线程进入读锁的前提条件:,进入写锁的前提条件:,我们知道ReentrantLock具备可重入的能力,即同一个线程多次获取锁,不引起阻塞,那么ReentrantReadWriteLock关于可重入性是怎么样的呢?,关于这个问题需要引入两个概念,锁升级,锁降级。,重入时锁升级不支持:持有读锁的情况下去获取写锁会导致获取写锁永久等待,需要先释放读,再去获得写,重入时锁降级支持:持有写锁的情况下去获取读锁,造成只有当前线程会持有读锁,因为写锁会互斥其他的锁,API介绍,构造方法:,常用API:,代码范式,运行结果:,202303070133465342aad35a6fac8f4118810ab7fdda48979a75117,运行结果:,20230307013608f3f1641887d803fe07a690413676c020f33369767,什么场景下读多写少? 想必最先想到的就是缓存把,ReentrantReadWriteLock在缓存场景中就是一个很典型的应用。,2023030701334878780e991e1e3d86876364aa6c0145cc3fa219164,缓存更新时,是先清缓存还是先更新数据库?,显而易见,通常情况下,先更新数据库,然后清空缓存。,本文讲解了ReentrantReadWriteLock读写锁常用的API, 以及通过几个demo的演示,讲解了读写锁的使用,希望对大家有帮助。

© 版权声明

相关文章