docs: @Override
  	public void stop(final Runnable callback) {
  		if (state.stop()){
  			serviceThreadPool.execute(new Runnable(){
  				@Override
  				public void run() {
  					try{
  						doStop();
  						state.finishStopping();
  						callback.run();
  					}catch(Exception e){
  						state.failStopping();
  						logger.warn("Failed to stop {}", this.getClass().getName(), e);
  					}
  				}
  			});
  		}
  	}