void startHealthChecker() {
        if (requestCount.getAndIncrement() != 0) {
            return;
        }
        final ScheduledHealthCheckerImpl newlyScheduled =
                new ScheduledHealthCheckerImpl(healthChecker, fallbackTtl, eventExecutor);
        // This spin prevents the following race condition, which occurs when this instance is shared
        // by more than one server instance:
        //
        // 1. Server A starts.
        // 2. Server A stops. decrementAndGet() returns 0, but it didn't clear `impl` yet.
        // 3. Server B starts; getAndIncrement() returns 0, but `impl` isn't `null` yet.
        //
        // There should be no unexpectedly long spin here, as long as a caller makes sure to call
        // `stopHealthChecker()` for each `startHealthChecker()`, because this method is guarded by
        // `requestCount.getAndIncrement()` to allow only the first request to start to schedule
        // a task.
        for (;;) {
            if (impl.compareAndSet(null, newlyScheduled)) {
                newlyScheduled.startHealthChecker(onHealthCheckerUpdate);
                break;
            }
        }
    }
A {@link ListenableHealthChecker} whose state can be set by the result of supplied CompletionStage.
This class can be shared by multiple {@link HealthCheckService}.
core/src/main/java/com/linecorp/armeria/server/healthcheck/ScheduledHealthChecker.java