code: public void registerTimeout(final K key, final long delay, final TimeUnit unit) {
  		Preconditions.checkState(timeoutListener != null, "The " + getClass().getSimpleName() +
  			" has not been started.");
  
  		if (timeouts.containsKey(key)) {
  			unregisterTimeout(key);
  		}
  
  		timeouts.put(key, new Timeout<>(timeoutListener, key, delay, unit, scheduledExecutorService));
  	}
docs: Register a timeout for the given key which shall occur in the given delay.
  
  @param key for which to register the timeout
  @param delay until the timeout
  @param unit of the timeout delay