Class SingleWaiterCooperativeNotifier

java.lang.Object
com.oracle.coherence.common.base.SingleWaiterMultiNotifier
com.oracle.coherence.common.base.SingleWaiterCooperativeNotifier
All Implemented Interfaces:
Notifier

public class SingleWaiterCooperativeNotifier extends SingleWaiterMultiNotifier
SingleWaiterCooperativeNotifier is an extension of the SingleWaiterMultiNotifier which attempts to offload potentially expensive "notification" work from signaling threads onto the waiting threads. This notifier is beneficial when there are few signaling threads, but potentially many waiting threads, each waiting on their own notifier.

Unlike the standard Notifier usage, a signaling thread must at some point invoke the static flush() method, or await(long) on any SingleWaiterCooperativeNotifier to ensure that all deferred signals are processed.

Author:
mf 2014.03.12
  • Field Details

    • m_threadAwait

      protected Thread m_threadAwait
      The waiting thread, or null. Visibility ensured via super.m_oState writes.
    • s_cSignal

      protected static byte s_cSignal
      An intentionally non-volatile signal counter to ensure periodic flushes. byte is used to allow for auto-flush on every 256 signals (rollover)
  • Constructor Details

    • SingleWaiterCooperativeNotifier

      public SingleWaiterCooperativeNotifier()
  • Method Details

    • flush

      public static void flush()
      Ensure that any deferred signals will be processed.

      Note it is more advantageous if the calling thread's natural idle point is to sit in await(long), in which case calling this method is not required.

    • await

      public void await(long cMillis) throws InterruptedException
      Description copied from interface: Notifier
      Wait for a notification. Note that spurious wake-ups are possible.
      Specified by:
      await in interface Notifier
      Overrides:
      await in class SingleWaiterMultiNotifier
      Parameters:
      cMillis - the maximum wait time in milliseconds, or zero for indefinite
      Throws:
      InterruptedException - if the calling thread is interrupted while it is waiting
    • signal

      public void signal()
      Description copied from interface: Notifier
      Notifies the waiting thread(s), waking them up if awaiting.
      Specified by:
      signal in interface Notifier
      Overrides:
      signal in class SingleWaiterMultiNotifier
    • toString

      public String toString()
      Overrides:
      toString in class SingleWaiterMultiNotifier
    • flush

      protected static void flush(int cWake, SingleWaiterCooperativeNotifier self)
      Ensure that any deferred signals will be processed.
      Parameters:
      cWake - the number of deferrals to signal on the calling thread
      self - the waiting notifier which is flushing, or null
    • consumeSignal

      protected void consumeSignal()
      Description copied from class: SingleWaiterMultiNotifier
      Consume the signal.
      Overrides:
      consumeSignal in class SingleWaiterMultiNotifier