重入锁是什么意思,锁降级有什么好处
重入锁是什么意思,锁降级有什么好处??? --------------------编程问答-------------------- 重入锁就是一个线程可以获取同一个锁多次降级锁应该指的是写锁可以降级为读锁 --------------------编程问答-------------------- 重入锁的概念是:自己可以再次获得自己的内部锁;重进入的实现是通过每个锁关联一个请求计数和一个占有它的线程,当计数为0时,认为锁是未被占有的,线程请求一个未被占有的锁时,jvm将记录锁的占有者,并将请求计数置为一,如果同一个线程再次请求,计数器将递增,每次占用线程退出同步块,计数器值将递减,直到计数器为0,锁释放
锁降级的好处应该是保证不死锁 --------------------编程问答-------------------- 示例用法。下面的代码展示了如何利用重入来执行升级缓存后的锁降级(为简单起见,省略了异常处理):
class CachedData {
Object data;
volatile boolean cacheValid;
ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
void processCachedData() {
rwl.readLock().lock();
if (!cacheValid) {
// Must release read lock before acquiring write lock
rwl.readLock().unlock();
rwl.writeLock().lock();
// Recheck state because another thread might have acquired
// write lock and changed state before we did.
if (!cacheValid) {
data = ...
cacheValid = true;
}
// Downgrade by acquiring read lock before releasing write lock
rwl.readLock().lock();
rwl.writeLock().unlock(); // Unlock write, still hold read
}
use(data);
rwl.readLock().unlock();
}
}
"// Downgrade by acquiring read lock before releasing write lock
rwl.readLock().lock();
rwl.writeLock().unlock(); // Unlock write, still hold read",
为什么这样写,改成
"// Downgrade by acquiring read lock before releasing write lock
rwl.writeLock().unlock();
rwl.readLock().lock();",
可以吗
补充:Java , Java SE