@Override
  public void start() {
    long startupBeginTime = System.currentTimeMillis();
    if (isRunning()) {
      throw new IllegalStateException("AsyncRequestResponseHandler is running.");
    }
    try {
      logger.info("Starting AsyncRequestResponseHandler with {} request workers", requestWorkersCount);
      for (int i = 0; i < requestWorkersCount; i++) {
        long workerStartupBeginTime = System.currentTimeMillis();
        AsyncRequestWorker asyncRequestWorker = new AsyncRequestWorker(metrics, restRequestService);
        asyncRequestWorkers.add(asyncRequestWorker);
        Utils.newThread("RequestWorker-" + i, asyncRequestWorker, false).start();
        long workerStartupTime = System.currentTimeMillis() - workerStartupBeginTime;
        metrics.requestWorkerStartTimeInMs.update(workerStartupTime);
        logger.info("AsyncRequestWorker startup took {} ms", workerStartupTime);
      }
      asyncResponseHandler = new AsyncResponseHandler(metrics);
      isRunning = true;
    } finally {
      long startupTime = System.currentTimeMillis() - startupBeginTime;
      metrics.requestResponseHandlerStartTimeInMs.update(startupTime);
      logger.info("AsyncRequestResponseHandler start took {} ms", startupTime);
    }
  }
Does startup tasks for the AsyncRequestResponseHandler. When the function returns, startup is FULLY complete.
ambry-rest/src/main/java/com/github/ambry/rest/AsyncRequestResponseHandler.java