Package com.lmax.disruptor
Class PhasedBackoffWaitStrategy
- java.lang.Object
-
- com.lmax.disruptor.PhasedBackoffWaitStrategy
-
- All Implemented Interfaces:
WaitStrategy
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.
-
-
Constructor Summary
Constructors Constructor Description PhasedBackoffWaitStrategy(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units, WaitStrategy fallbackStrategy)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidsignalAllWhenBlocking()Implementations should signal the waitingEventProcessors that the cursor has advanced.longwaitFor(long sequence, Sequence cursor, Sequence dependentSequence, SequenceBarrier barrier)Wait for the given sequence to be available.static PhasedBackoffWaitStrategywithLiteLock(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)Block with wait/notifyAll semanticsstatic PhasedBackoffWaitStrategywithLock(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)Block with wait/notifyAll semanticsstatic PhasedBackoffWaitStrategywithSleep(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)Block by sleeping in a loop
-
-
-
Constructor Detail
-
PhasedBackoffWaitStrategy
public PhasedBackoffWaitStrategy(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units, WaitStrategy fallbackStrategy)
-
-
Method Detail
-
withLock
public static PhasedBackoffWaitStrategy withLock(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)
Block with wait/notifyAll semantics
-
withLiteLock
public static PhasedBackoffWaitStrategy withLiteLock(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)
Block with wait/notifyAll semantics
-
withSleep
public static PhasedBackoffWaitStrategy withSleep(long spinTimeout, long yieldTimeout, java.util.concurrent.TimeUnit units)
Block by sleeping in a loop
-
waitFor
public long waitFor(long sequence, Sequence cursor, Sequence dependentSequence, SequenceBarrier barrier) throws AlertException, java.lang.InterruptedException, TimeoutExceptionDescription copied from interface:WaitStrategyWait for the given sequence to be available. It is possible for this method to return a value less than the sequence number supplied depending on the implementation of the WaitStrategy. A common use for this is to signal a timeout. Any EventProcessor that is using a WaitStrategy to get notifications about message becoming available should remember to handle this case. TheBatchEventProcessorexplicitly handles this case and will signal a timeout if required.- Specified by:
waitForin interfaceWaitStrategy- Parameters:
sequence- 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.- Returns:
- the sequence that is available which may be greater than the requested sequence.
- Throws:
AlertException- if the status of the Disruptor has changed.java.lang.InterruptedException- if the thread is interrupted.TimeoutException
-
signalAllWhenBlocking
public void signalAllWhenBlocking()
Description copied from interface:WaitStrategyImplementations should signal the waitingEventProcessors that the cursor has advanced.- Specified by:
signalAllWhenBlockingin interfaceWaitStrategy
-
-