public LocatorState waitOnStatusResponse(final long timeout, final long interval,
      final TimeUnit timeUnit) {
    final long endTimeInMilliseconds = (System.currentTimeMillis() + timeUnit.toMillis(timeout));

    while (System.currentTimeMillis() < endTimeInMilliseconds) {
      try {
        LocatorStatusResponse response = statusForLocator(getPort(), getBindAddressString());
        return new LocatorState(this, Status.ONLINE, response);
      } catch (Exception handled) {
        timedWait(interval, timeUnit);
      }
    }

    // NOTE just because we were not able to communicate with the Locator in the given amount of
    // time does not mean
    // the Locator is having problems. The Locator could be slow in starting up and the timeout may
    // not be
    // long enough.
    return new LocatorState(this, Status.NOT_RESPONDING);
  }
Waits for a Locator status request response to be returned up to the specified timeout in the
given unit of time. This call will send status requests at fixed intervals in the given unit of
time until the timeout expires. If the request to determine the Locator's status is successful,
then the Locator is considered to be 'ONLINE'. Otherwise, the Locator is considered to be
unresponsive to the status request.

However, this does not necessarily imply the Locator start was unsuccessful, only that a
response was not received in the given time period.

Note, this method does not block or cause the Locator's location-based services (daemon
Threads) to continue running in anyway if the main application Thread terminates when running
the Locator in-process. If the caller wishes to start a Locator in an asynchronous manner
within the application process, then a call should be made to <code>waitOnLocator</code>.

@param timeout a long value in time unit indicating when the period of time should expire in
       attempting to determine the Locator's status.
@param interval a long value in time unit for how frequent the requests should be sent to the
       Locator.
@param timeUnit the unit of time in which the timeout and interval are measured.
@return the state of the Locator, which will either be 'ONLINE' or "NOT RESPONDING'. If the
        status returned is 'NOT RESPONDING', it just means the Locator did not respond to the
        status request within the given time period. It should not be taken as the Locator
        failed to start.
@see #waitOnLocator()
geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java