- java.lang.Object
-
- com.lmax.disruptor.SleepingWaitStrategy
-
- All Implemented Interfaces:
WaitStrategy
public final class SleepingWaitStrategy extends java.lang.Object implements WaitStrategy
Sleeping strategy that initially spins, then uses a Thread.yield(), and eventually sleep (LockSupport.parkNanos(n)) for the minimum number of nanos the OS and JVM will allow while theEventProcessors are waiting on a barrier.This strategy is a good compromise between performance and CPU resource. Latency spikes can occur after quiet periods. It will also reduce the impact on the producing thread as it will not need signal any conditional variables to wake up the event handling thread.
-
-
Constructor Summary
Constructors Constructor Description SleepingWaitStrategy()Provides a sleeping wait strategy with the default retry and sleep settingsSleepingWaitStrategy(int retries)SleepingWaitStrategy(int retries, long sleepTimeNs)
-
Method Summary
All 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.
-
-
-
Constructor Detail
-
SleepingWaitStrategy
public SleepingWaitStrategy()
Provides a sleeping wait strategy with the default retry and sleep settings
-
SleepingWaitStrategy
public SleepingWaitStrategy(int retries)
- Parameters:
retries- How many times the strategy should retry before sleeping
-
SleepingWaitStrategy
public SleepingWaitStrategy(int retries, long sleepTimeNs)- Parameters:
retries- How many times the strategy should retry before sleepingsleepTimeNs- How long the strategy should sleep, in nanoseconds
-
-
Method Detail
-
waitFor
public long waitFor(long sequence, Sequence cursor, Sequence dependentSequence, SequenceBarrier barrier) throws AlertExceptionDescription 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.
-
signalAllWhenBlocking
public void signalAllWhenBlocking()
Description copied from interface:WaitStrategyImplementations should signal the waitingEventProcessors that the cursor has advanced.- Specified by:
signalAllWhenBlockingin interfaceWaitStrategy
-
-