重入锁是什么意思,锁降级有什么好处???

解决方案 »

  1.   

    重入锁的概念是:自己可以再次获得自己的内部锁;重进入的实现是通过每个锁关联一个请求计数和一个占有它的线程,当计数为0时,认为锁是未被占有的,线程请求一个未被占有的锁时,jvm将记录锁的占有者,并将请求计数置为一,如果同一个线程再次请求,计数器将递增,每次占用线程退出同步块,计数器值将递减,直到计数器为0,锁释放
    锁降级的好处应该是保证不死锁
      

  2.   

    示例用法。下面的代码展示了如何利用重入来执行升级缓存后的锁降级(为简单起见,省略了异常处理):  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();",
     可以吗