code: void runMoreOnKeyQueueOrStop(K key) {
      EntryEvent<K,V> _event;
      synchronized (getLockObject(key)) {
        Queue<EntryEvent<K,V>> q = keyQueue.get(key);
        if (q.isEmpty()) {
          keyQueue.remove(key);
          return;
        }
        _event = q.remove();
      }
      List<Listener<K,V>> _listeners =
        new ArrayList<Listener<K, V>>(asyncListenerByType.get(_event.getEventType()));
      if (_listeners.isEmpty()) {
        runMoreOnKeyQueueOrStop(key);
        return;
      }
      runAllListenersInParallel(_event, _listeners);
    }
docs: Check the event queue for this key and process the next event. If no more events are
  present remove the queue.