docs: public synchronized void synchronize() throws InterruptedException {
          check(n);
  
          try {
              onCriteriaMet();
          } catch (Error | RuntimeException e) {
              abort(e);
              throw e;
          }
  
          check(n*2);
      }