code: public final boolean tryAcquireNanos(int arg, long nanosTimeout)
              throws InterruptedException {
          if (Thread.interrupted())
              throw new InterruptedException();
          return tryAcquire(arg) ||
              doAcquireNanos(arg, nanosTimeout);
      }
docs: Attempts to acquire in exclusive mode, aborting if interrupted,
  and failing if the given timeout elapses.  Implemented by first
  checking interrupt status, then invoking at least once {@link
  #tryAcquire}, returning on success.  Otherwise, the thread is
  queued, possibly repeatedly blocking and unblocking, invoking
  {@link #tryAcquire} until success or the thread is interrupted
  or the timeout elapses.  This method can be used to implement
  method {@link Lock#tryLock(long, TimeUnit)}.
  
  @param arg the acquire argument.  This value is conveyed to
  {@link #tryAcquire} but is otherwise uninterpreted and
  can represent anything you like.
  @param nanosTimeout the maximum number of nanoseconds to wait
  @return {@code true} if acquired; {@code false} if timed out
  @throws InterruptedException if the current thread is interrupted