code: public void acquireRead() {
          if (stats != null) {    // stats is null by default
              synchronized (this) {
                  stats._rc++;
                  if (rwl.getReadLockCount() > 0) {
                      stats._mrc++;
                  }
                  if (rwl.isWriteLocked()) {
                      stats._wrc++;
                  }
              }
          }
          rwl.readLock().lock();
      }
docs: <p>Acquire a read lock, blocking until a read lock is
  available.  Multiple readers can concurrently hold the read
  lock.</p>
  
  <p>If there's a writer, or a waiting writer, increment the
  waiting reader count and block on this.  Otherwise
  increment the active reader count and return.  Caller must call
  releaseRead when done (for example, in a finally block).</p>