code: public final boolean tryLockForRead(L locker, long timeout, TimeUnit unit)
          throws InterruptedException
      {
          if (Thread.interrupted()) {
              throw new InterruptedException();
          }
          if (!tryLockForRead(locker)) {
              return lockForReadQueuedInterruptibly(locker, addReadWaiter(), unit.toNanos(timeout));
          }
          return true;
      }
docs: Attempt to acquire a shared read lock, waiting a maximum amount of
  time.
  
  @param locker object which might be write or upgrade lock owner
  @return true if acquired