code: private void publish(Cache<K, V> cache, EventType eventType,
        K key, @Nullable V oldValue, @Nullable V newValue, boolean quiet) {
      if (dispatchQueues.isEmpty()) {
        return;
      }
  
      JCacheEntryEvent<K, V> event = null;
      for (Registration<K, V> registration : dispatchQueues.keySet()) {
        if (!registration.getCacheEntryListener().isCompatible(eventType)) {
          continue;
        }
        if (event == null) {
          event = new JCacheEntryEvent<>(cache, eventType, key, oldValue, newValue);
        }
        if (!registration.getCacheEntryFilter().evaluate(event)) {
          continue;
        }
  
        JCacheEntryEvent<K, V> e = event;
        CompletableFuture<Void> future =
            dispatchQueues.computeIfPresent(registration, (k, queue) -> {
              Runnable action = () -> registration.getCacheEntryListener().dispatch(e);
              return queue.thenRunAsync(action, executor);
            });
        if ((future != null) && registration.isSynchronous() && !quiet) {
          pending.get().add(future);
        }
      }
    }
docs: Broadcasts the event to all of the interested listener's dispatch queues.