class HealthCheckRegistry {

    public void register(String name, HealthCheck healthCheck) {
        HealthCheck registered;
        synchronized (lock) {
            if (healthChecks.containsKey(name)) {
                throw new IllegalArgumentException("A health check named " + name + " already exists");
            }
            registered = healthCheck;
            if (healthCheck.getClass().isAnnotationPresent(Async.class)) {
                registered = new AsyncHealthCheckDecorator(healthCheck, asyncExecutorService);
            }
            healthChecks.put(name, registered);
        }
        onHealthCheckAdded(name, registered);
    }

    public  HealthCheckRegistry();
    public  HealthCheckRegistry(int asyncExecutorPoolSize);
    public  HealthCheckRegistry(ScheduledExecutorService asyncExecutorService);

}