Class QueuedNotificationManager<L,N>

All Implemented Interfaces:
Identifiable<String>, NotificationManager<L,N>

public final class QueuedNotificationManager<L,N> extends IdentityQueuedNotificationManager<L,N>

This class is pessimistic about listener type and uses identity mapping for comparing them. This is defensive versus reused objects, maintaining semantics. This may not always be intended, for example if L is a String which is being dynamically determined. In that case we do not want to use identity, but equality, as otherwise the caller is forced to use String.intern() -- leading to interning in lookup, which is absolutely unnecessary. In such use cases, use EqualityQueuedNotificationManager instead.

Author:
Thomas Pantelis
  • Method Details

    • create

      public static <L, N> QueuedNotificationManager<L,N> create(@NonNull Executor executor, @NonNull QueuedNotificationManager.BatchedInvoker<L,N> listenerInvoker, int maxQueueCapacity, @NonNull String name)
      Create a new notification manager.
      Parameters:
      executor - the Executor to use for notification tasks
      listenerInvoker - the QueuedNotificationManager.BatchedInvoker to use for invoking listeners
      maxQueueCapacity - the capacity of each listener queue
      name - the name of this instance for logging info
    • getExecutor

      public final Executor getExecutor()
      Returns the Executor to used for notification tasks.
    • getMaxQueueCapacity

      public final int getMaxQueueCapacity()
      Returns the maximum listener queue capacity.
    • getMXBean

      public final QueuedNotificationManagerMXBean getMXBean()
      Return an QueuedNotificationManagerMXBean tied to this instance.
      Returns:
      An QueuedNotificationManagerMXBean object.
    • submitNotification

      public final void submitNotification(L listener, N notification)
      Description copied from interface: NotificationManager
      Submits a notification to be queued and dispatched to the given listener.

      Note: This method may block if the listener queue is currently full.

      Specified by:
      submitNotification in interface NotificationManager<T,L>
      Parameters:
      listener - the listener to notify
      notification - the notification to dispatch
    • submitNotifications

      public final void submitNotifications(L listener, @Nullable Iterable<N> notifications)
      Description copied from interface: NotificationManager
      Submits notifications to be queued and dispatched to the given listener.

      Note: This method may block if the listener queue is currently full.

      Specified by:
      submitNotifications in interface NotificationManager<T,L>
      Parameters:
      listener - the listener to notify
      notifications - the notifications to dispatch