Package com.oracle.coherence.common.base
Class ConcurrentNotifier
java.lang.Object
com.oracle.coherence.common.base.ConcurrentNotifier
- All Implemented Interfaces:
Notifier
A Condition-like object, usable by multiple threads to both wait and signal.
Note that no synchronization is needed to use this class; i.e. clients must not synchronize on this class prior to calling await() or signal(), nor should the use any of the primitive wait() or notify() methods.
Unlike the SingleWaiterMultiNotifier
, this notifier implementation requires
the notion of a ready
check. When the notifier is ready then a call
to await because a no-op. An example ready check for a notifier based queue removal
would be !queue.isEmpty();
- Author:
- mf 2018.04.13
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static final class
A link in a stack of waiting threads. -
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
await
(long cMillis) Wait for a notification.protected abstract boolean
isReady()
Return true if the notifier is ready, i.e. threads entering await cant return without blocking.protected ConcurrentNotifier.Link
makeSelfLink
(Thread threadThis, long lBitThis, Object oHead) Make a link for the calling thread, checking if one already exists for this notifier.protected void
park
(long cMillis) Block the calling thread if the notifier is not ready.void
signal()
Notifies the waiting thread(s), waking them up if awaiting.protected void
Full version of signal.
-
Field Details
-
m_oWaitHead
The head of a stack of waiting threads. The head can be either a Thread, or a Link.
-
-
Constructor Details
-
ConcurrentNotifier
public ConcurrentNotifier()
-
-
Method Details
-
await
Description copied from interface:Notifier
Wait for a notification. Note that spurious wake-ups are possible.- Specified by:
await
in interfaceNotifier
- 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. -
signalInternal
protected void signalInternal()Full version of signal. -
park
Block the calling thread if the notifier is not ready.- Parameters:
cMillis
- the time to block for- Throws:
InterruptedException
- if the calling thread is interrupted
-
makeSelfLink
Make a link for the calling thread, checking if one already exists for this notifier.- Parameters:
threadThis
- the calling threadlBitThis
- this thread's contribution to the bloom filteroHead
- the current head- Returns:
- this thread's link, or null if we should not block
-
isReady
protected abstract boolean isReady()Return true if the notifier is ready, i.e. threads entering await cant return without blocking.- Returns:
- true if the notifier is ready
-