code: void lockSharedInterruptibly(final Integer permit) throws InterruptedException {
          if (permit == null) {
              throw new IllegalArgumentException();
          }
          sync.acquireSharedInterruptibly(permit);
      }
docs: Acquire the shared lock allowing the acquisition to be interrupted.
  @param permit - the permit Integer for this operation. May not be {@code null}.
  @throws InterruptedException - if the acquiring thread is interrupted.
  @throws IllegalArgumentException if {@code permit} is null.