@Override
  public boolean waitFor(long timeout, TimeUnit unit) {
    try {
      get(timeout, unit);
    }
    catch (InterruptedException | ExecutionException e) {
      throw new RuntimeException(e);
    }
    catch (TimeoutException | CancellationException ignored) {
    }
    return isDone();
  }
@Override
  public boolean waitFor(long timeout, TimeUnit unit)