code: public boolean await(long timeout,
                           TimeUnit unit) throws InterruptedException {
          return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout));
      }
docs: Causes the current thread to wait until {@code count} reaches zero,
  unless the thread is {@linkplain Thread#interrupt interrupted}, or the
  specified waiting time elapses.
  <p>
  <p>
  If the current {@code count} is zero, then this method returns
  immediately with the value {@code true}.
  <p>
  <p>
  If the current {@code count} is greater than zero, then the current
  thread becomes disabled for thread scheduling purposes and lies dormant
  until either:
  <ul>
  <li>The {@code count} reaches zero due to an invocation of {@link
  #countDown countDown()}, {@link #countDown(int) countDown(int}}, or {@link * setCount(int) setCount(int)}
  <li>Some other thread {@linkplain Thread#interrupt interrupts} the
  current thread
  <li>The specified waiting time elapses.
  </ul>
  If the count reaches zero then the method returns with the value
  {@code true}.
  <p>
  If the current thread:
  <ul>
  <li>has its interrupted status set on entry to this method; or
  <li>is {@linkplain Thread#interrupt interrupted} while waiting,
  </ul>
  then {@link InterruptedException} is thrown and the current thread's
  interrupted status is cleared.
  <p>
  If the specified waiting time elapses then the value {@code false} is
  returned. If the time is less than or equal to zero, the method will not
  wait at all.
  
  @param timeout the maximum time to wait
  @param unit    the time unit of the {@code timeout} argument
  @return {@code true} if the count reached zero and {@code false} if the
  waiting time elapsed before the count reached zero
  @throws InterruptedException if the current thread is interrupted while
  waiting