docs: public boolean waitForCompletion(long duration, TimeUnit timeUnit) throws InterruptedException {
      synchronized (lock) {
        if (!isCompleted()) {
          lock.wait(timeUnit.toMillis(duration));
        }
        return isCompleted();
      }
    }