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
Nested ClassesModifier and TypeClassDescriptionprotected static final classA link in a stack of waiting threads. -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidawait(long cMillis) Wait for a notification.protected abstract booleanisReady()Return true if the notifier is ready, i.e. threads entering await cant return without blocking.protected ConcurrentNotifier.LinkmakeSelfLink(Thread threadThis, long lBitThis, Object oHead) Make a link for the calling thread, checking if one already exists for this notifier.protected voidpark(long cMillis) Block the calling thread if the notifier is not ready.voidsignal()Notifies the waiting thread(s), waking them up if awaiting.protected voidFull 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:NotifierWait for a notification. Note that spurious wake-ups are possible.- Specified by:
awaitin 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:NotifierNotifies 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
-