1. 创建,两种fair和unfair
unfair:read和write锁获取依赖于Reentrancy规则,不存在先后顺序
fair:各个线程按照时间顺序进行锁的获取,当一个线程试图获取read锁时,如果当前没有线程获取write锁且试图获取write的线程请求时间没有请求read锁的时间久,则获取read锁。当一个线程试图获取write锁时,当且仅当当前所有的read锁和write锁全部释放才能成功(ReadLoac.tryLock()和WriteLock.tryLock()不受该约束)
2. ReentrantReadWriteLock提供了两个锁,readLock和writeLock,readLock可多线程并发执行,writeLock只能单线程执行(类似于synchronized),线程获取writeLock锁之后可以继续获取readLock,反过来不行,后面相关说明
3. 降级:writeLock变成readLock成为锁降级,具体操作为writeLock.lock->readLock.lock->writeLock.unlock
这样就把writeLock变成了readLock
4. 两种锁再获取锁期间都支持interruption
5. 只有writeLock支持condition,通过writeLock.newCondition获得condition对象,对weiteLock进行await和signal、signalAll控制,因为readLock本身支持多线程迸发访问,所以condition控制对readLock没什么用