code: public boolean awaitFirstIncrement(long timeout, TimeUnit unit) throws InterruptedException
    {
      return sync.tryAcquireSharedNanos(0, unit.toNanos(timeout));
    }
docs: The difference between this method and {@link #awaitCount(long, long, TimeUnit)} with argument 1 is that {@code
  awaitFirstIncrement()} returns boolean designating whether the count was await (while waiting for no longer than
  for the specified period of time), while {@code awaitCount()} throws {@link TimeoutException} if the count was not
  awaited.