Что такое обновление / Переход на более раннюю версию ReentrantReadWriteLock?

Что такое обновление / понижение версии ReentrantReadWriteLock ? Я вижу javadoc об обновлении / понижении версии:

"Блокировка перехода на более раннюю версию: Повторное вхождение также позволяет перейти от блокировки записи к блокировке чтения, установив блокировку записи, затем блокировку чтения и затем сняв блокировку записи. Однако переход с блокировки чтения на блокировку записи невозможен ».

И предоставленный образец:

class CachedData {
   Object data;
   volatile boolean cacheValid;
   ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

   void processCachedData() {
     rwl.readLock().lock();
     if (!cacheValid) {
        // upgrade lock manually
        rwl.readLock().unlock();   // must unlock first to obtain writelock
        rwl.writeLock().lock();
        if (!cacheValid) { // recheck
          data = ...
          cacheValid = true;
        }
        // downgrade lock
        rwl.readLock().lock();  // reacquire read without giving up write lock
        rwl.writeLock().unlock(); // unlock write, still hold read
     }

     use(data);
     rwl.readLock().unlock();
   }
 }

Я знаю, что там говорится о взаимосвязи между readLock и writeLock, но я не мог понять четкую концепцию из док. Не могли бы вы дать мне еще немного объяснений? Спасибо!

8
задан 卢声远 Shengyuan Lu 21 February 2011 в 09:29
поделиться