读写锁也是一种在日常开发中使用较多的锁,它主要应用在读比较多而写比较少的情况下。举个例子,比如网络上的词条大家通常都是在读,但是也有需要修改的时候,比如版本的升级,提升词条解释的完善性等方面。这种情况下需要一种能够提供读取数据的高并发效率锁,同时在写的时候能保证安全的互斥访问,这个时候需要使用ReadWriteLock接口。
ReadWriteLock接口维护了一对锁,一个是针对读操作的锁,一个是针对写操作的锁。读锁在没有写操作的时候会被多个读线程同时持有,这样极大提高了读取的效率。写操作是互斥的,只有一个线程可以修改数据。ReadWriteLock接口声明了两个重要的方法:1.readLock方法用来返回读锁。2.writeLock方法用来返回写锁。
可重入读写锁ReentrantReadWriteLock实现了接口ReadWriteLock,可以通过一个无参的构造器创建一个非公平策略的重入读写锁实例,也可以通过给它的构造器传递一个boolean类型的数据来创建一个指定公平策略的重入读写锁实例。为了演示重入读写锁的应用,我们看一个实例:
例子描述了一个重入读写锁的利用,这个例子只是简单的描述了一下重入读写锁的应用,没有考虑其他因素(读者可以自行完善),例子中使用了集合LinkedList,它本身并不是线程安全的。