- ReentrantReadWriteLock 可重入的读写锁
ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();
ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();
public void readTest() {
readLock.lock();
try {
System.out.println("读取受保护的资源");
} finally {
readLock.unlock();
}
}
public void writeTest() {
writeLock.lock();
try {
System.out.println("修改受保护的资源");
} finally {
writeLock.unlock();
}
}
- ReentrantReadWriteLock 锁的特点
boolean fair=true;
ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(fair);
- 可重入性:写锁可以继续重入获得写锁和读锁;但是读锁不能获得写锁,只能重入读锁。
- 锁降级:写锁可以降级为读锁
- 先获取写锁,重入(获得)读锁,先释放写锁(此时读锁未释放,降级为了读锁),再释放读锁
- 锁的个数:最多65535个
- 应用场景:读多写少,读竞争激烈,写竞争比较少
- 使用锁时异常情况处理