Package com.oracle.coherence.common.base
Class ConcurrentNotifier
- java.lang.Object
-
- com.oracle.coherence.common.base.ConcurrentNotifier
-
- All Implemented Interfaces:
Notifier
public abstract class ConcurrentNotifier extends Object implements 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 aready
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 Classes Modifier and Type Class Description protected static class
ConcurrentNotifier.Link
A link in a stack of waiting threads.
-
Field Summary
Fields Modifier and Type Field Description protected Object
m_oWaitHead
The head of a stack of waiting threads.
-
Constructor Summary
Constructors Constructor Description ConcurrentNotifier()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
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
signalInternal()
Full version of signal.
-
-
-
Field Detail
-
m_oWaitHead
protected volatile Object m_oWaitHead
The head of a stack of waiting threads. The head can be either a Thread, or a Link.
-
-
Method Detail
-
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 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
protected void park(long cMillis) throws InterruptedException
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
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.- 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
-
-