code: boolean lockShared(final Integer permit, final long timeout, final TimeUnit unit) {
          boolean result = false;
          try {
              result = lockSharedInterruptibly(permit, timeout, unit);
          } catch (InterruptedException e) {
              Thread.currentThread().interrupt();
          }
          return result;
      }
docs: Attempts shared acquisition with a max wait time.
  @param permit - the permit Integer for this operation. May not be {@code null}.
  @param timeout - the time value to wait for acquiring the lock
  @param unit - See {@code TimeUnit} for valid values
  @return {@code boolean} true on success.