public final class PhasedBackoffWaitStrategy extends java.lang.Object implements WaitStrategy
Phased wait strategy for waiting EventProcessors on a barrier.
This strategy can be used when throughput and low-latency are not as important as CPU resource. Spins, then yields, then waits using the configured fallback WaitStrategy.
| Modifier and Type | Field and Description |
|---|---|
private WaitStrategy |
fallbackStrategy |
private static int |
SPIN_TRIES |
private long |
spinTimeoutNanos |
private long |
yieldTimeoutNanos |
| Constructor and Description |
|---|
PhasedBackoffWaitStrategy(long spinTimeout,
long yieldTimeout,
java.util.concurrent.TimeUnit units,
WaitStrategy fallbackStrategy) |
| Modifier and Type | Method and Description |
|---|---|
void |
signalAllWhenBlocking()
Implementations should signal the waiting
EventProcessors that the cursor has advanced. |
long |
waitFor(long sequence,
Sequence cursor,
Sequence dependentSequence,
SequenceBarrier barrier)
Wait for the given sequence to be available.
|
static PhasedBackoffWaitStrategy |
withLiteLock(long spinTimeout,
long yieldTimeout,
java.util.concurrent.TimeUnit units)
Construct
PhasedBackoffWaitStrategy with fallback to LiteBlockingWaitStrategy |
static PhasedBackoffWaitStrategy |
withLock(long spinTimeout,
long yieldTimeout,
java.util.concurrent.TimeUnit units)
Construct
PhasedBackoffWaitStrategy with fallback to BlockingWaitStrategy |
static PhasedBackoffWaitStrategy |
withSleep(long spinTimeout,
long yieldTimeout,
java.util.concurrent.TimeUnit units)
Construct
PhasedBackoffWaitStrategy with fallback to SleepingWaitStrategy |
private static final int SPIN_TRIES
private final long spinTimeoutNanos
private final long yieldTimeoutNanos
private final WaitStrategy fallbackStrategy
public PhasedBackoffWaitStrategy(long spinTimeout,
long yieldTimeout,
java.util.concurrent.TimeUnit units,
WaitStrategy fallbackStrategy)
public static PhasedBackoffWaitStrategy withLock(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)
PhasedBackoffWaitStrategy with fallback to BlockingWaitStrategyspinTimeout - The maximum time in to busy spin for.yieldTimeout - The maximum time in to yield for.units - Time units used for the timeout values.public static PhasedBackoffWaitStrategy withLiteLock(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)
PhasedBackoffWaitStrategy with fallback to LiteBlockingWaitStrategyspinTimeout - The maximum time in to busy spin for.yieldTimeout - The maximum time in to yield for.units - Time units used for the timeout values.public static PhasedBackoffWaitStrategy withSleep(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)
PhasedBackoffWaitStrategy with fallback to SleepingWaitStrategyspinTimeout - The maximum time in to busy spin for.yieldTimeout - The maximum time in to yield for.units - Time units used for the timeout values.public long waitFor(long sequence,
Sequence cursor,
Sequence dependentSequence,
SequenceBarrier barrier)
throws AlertException,
java.lang.InterruptedException,
TimeoutException
WaitStrategyBatchEventProcessor explicitly
handles this case and will signal a timeout if required.waitFor in interface WaitStrategysequence - to be waited on.cursor - the main sequence from ringbuffer. Wait/notify strategies will
need this as it's the only sequence that is also notified upon update.dependentSequence - on which to wait.barrier - the processor is waiting on.AlertException - if the status of the Disruptor has changed.java.lang.InterruptedException - if the thread is interrupted.TimeoutException - if a timeout occurs before waiting completes (not used by some strategies)public void signalAllWhenBlocking()
WaitStrategyEventProcessors that the cursor has advanced.signalAllWhenBlocking in interface WaitStrategy