读写锁用的是同一个Sycn同步器,因此等待队列、state等也是同一个。
使用场景
当读操作远远高于写操作时,用读写锁让读可以并发,提高性能。读写是互斥的。
使用读锁保护数据的read方法,写锁保护数据的write方法。
读读之间是并发
@Slf4j
public class DataContainer {private Object data;private ReentrantReadWriteLock rw = new ReentrantReadWriteLock();private ReentrantReadWriteLock.WriteLock w = rw.writeLock();private ReentrantReadWriteLock.ReadLock r = rw.readLock();public Object read() {log.debug("获取读锁");r.lock();try {log.debug("读取");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}finally {log.debug("释放读锁");r.unlock();}return data;}public void write() {log.debug("获取写锁");w.lock();try {