code: public final void acquireSharedInterruptibly(int arg)
              throws InterruptedException {
          if (Thread.interrupted())
              throw new InterruptedException();
          if (tryAcquireShared(arg) < 0)
              doAcquireSharedInterruptibly(arg);
      }
docs: Acquires in shared mode, aborting if interrupted.  Implemented
  by first checking interrupt status, then invoking at least once
  {@link #tryAcquireShared}, returning on success.  Otherwise the
  thread is queued, possibly repeatedly blocking and unblocking,
  invoking {@link #tryAcquireShared} until success or the thread
  is interrupted.
  @param arg the acquire argument.
  This value is conveyed to {@link #tryAcquireShared} but is
  otherwise uninterpreted and can represent anything
  you like.
  @throws InterruptedException if the current thread is interrupted