code: protected VALUE read(ReadWriteLock lock, KEY key) {
  
      Lock readLock = lock.readLock();
  
      try {
        readLock.lock();
  
        return getCache().get(key);
      }
      finally {
        readLock.unlock();
      }
    }
docs: Reads the value of the {@link Cache} entry identified by the given {@link KEY key}.
  
  This {@link Cache} operation acquires a read lock.
  
  @param lock {@link ReadWriteLock} used to coordinate the {@link Cache} read (get) operation
  with possibly other concurrent {@link Cache} operations.
  @param key {@link KEY key} identifying the {@link Cache} entry with the {@link VALUE value} to read.
  @return the {@link VALUE} from the {@link Cache} entry identified by the given {@link KEY key},
  or {@literal null} if the {@link Cache} entry with the given {@link KEY key} is not present.
  @see java.util.concurrent.locks.ReadWriteLock#readLock()
  @see #getCache()