docs: @Override
    public synchronized void start() {
      if (thread != null) {
        throw new IllegalThreadStateException("Parser already started");
      }
  
      String name = getThreadName() + "(" + getUri().toString() + ")";
  
      CountDownLatch startSignal = new CountDownLatch(1);
      Runnable runnable = getRunnable(startSignal);
  
      thread = new Thread(runnable, name);
      thread.start();
  
      // Block until the thread has started
      try {
        startSignal.await();
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }
    }