一、读写锁概述
内置锁(Synchronized)和重入锁(ReentrantLock)都属于互斥锁,互斥是一种过于严格的加锁策略,它可以避免写写、读写冲突,但同时也避免了读读冲突。但在许多情况下,在数据结构上操作都是读操作。此时如果能放宽加锁要求,允许多个执行读操作的线程同时访问数据结构,那么将提升程序的性能。只要保证每个线程都能读到最新的数据,且在读取数据时没有其它线程修改数据,那么就不会有安全问题。因此,读写锁应运而生。
在读写锁实现的加锁策略中,允许每次多个读操作同时进行,或者只允许每次一个写操作。可以把读写锁当做是一种锁分离的思想。读写锁根据读写操作功能上的不同,进行了有效的锁分离。读写锁能保证读写、写写互斥,但读读不互斥。
二、读写锁的实现原理
请参考:ReentrantReadWriteLock源码解析
三、读写锁的升降级
读写锁支持锁的降级,锁降级指的是写锁降级为读锁,也就是持有写锁而不释放的情况下,可以再获得读锁。读写锁不支持锁的升级。
总结
1.读写锁是使用了锁分离的思想,内部实现了读锁和写锁,仅仅读读不互斥,而读写,写写都会互斥。
2.读写锁不支持升级,支持降级:即持有写锁而不释放的情况下,可以再获得读锁。