上一篇文章讲了ConrrentLinkedQueue的设计思想,本节简单介绍一下ReadWriteLock的设计思想
在我们编码中会遇到一种情况,很多的线程读取共享数据,只有一小部分的线程修改共享数据,我们为了保证数据共享的可见性和整体性,更为了实现高效的并发,定一个ReadWriteLock接口
ReadWirteLock定义了两个方法:
/**
* Returns the lock used for reading.
*
* @return the lock used for reading
*/
Lock readLock();
/**
* Returns the lock used for writing.
*
* @return the lock used for writing
*/
Lock writeLock();
一个是获取读锁,一个是获取写锁。
- 为什么读写锁要分开,因为读锁可以被多个线程获取,但是写锁只能专属一个线程。
- 线程要想获取读锁,必须等待所有的写锁释放
- 线程写锁获取之前,必须等待当前线程释放读锁
- 可以考虑实现公平锁,可以考虑实现重入,可以考虑锁升级降级
具体实现看下一篇