@Override
  public boolean waitFor(long timeout, TimeUnit unit) {
    try {
      if (!isDone()) {
        if (mySemaphore.tryAcquire(timeout, unit)) {
          mySemaphore.release();
        }
      }
    }
    catch (InterruptedException ignored) {
    }
    return isDone();
  }
@Override
  public boolean waitFor(long timeout, TimeUnit unit)