public final class SingleProducerSequencer extends AbstractSequencer
Coordinator for claiming sequences for access to a data structure while tracking dependent Sequence
s.
Not safe for use from multiple threads as it does not implement any barriers.
Note on Cursored.getCursor()
: With this sequencer the cursor value is updated after the call
to Sequenced.publish(long)
is made.
Modifier and Type | Field and Description |
---|---|
protected long |
cachedValue |
protected long |
nextValue
Set to -1 as sequence starting point
|
protected long |
p1 |
protected long |
p2 |
protected long |
p3 |
protected long |
p4 |
protected long |
p5 |
protected long |
p6 |
protected long |
p7 |
bufferSize, cursor, gatingSequences, waitStrategy
INITIAL_CURSOR_VALUE
Constructor and Description |
---|
SingleProducerSequencer(int bufferSize,
WaitStrategy waitStrategy)
Construct a Sequencer with the selected wait strategy and buffer size.
|
Modifier and Type | Method and Description |
---|---|
void |
claim(long sequence)
Claim a specific sequence.
|
long |
getHighestPublishedSequence(long lowerBound,
long availableSequence)
Get the highest sequence number that can be safely read from the ring buffer.
|
boolean |
hasAvailableCapacity(int requiredCapacity)
Has the buffer got capacity to allocate another sequence.
|
boolean |
isAvailable(long sequence)
Confirms if a sequence is published and the event is available for use; non-blocking.
|
long |
next()
Claim the next event in sequence for publishing.
|
long |
next(int n)
Claim the next n events in sequence for publishing.
|
void |
publish(long sequence)
Publishes a sequence.
|
void |
publish(long lo,
long hi)
Batch publish sequences.
|
long |
remainingCapacity()
Get the remaining capacity for this sequencer.
|
long |
tryNext()
Attempt to claim the next event in sequence for publishing.
|
long |
tryNext(int n)
Attempt to claim the next n events in sequence for publishing.
|
addGatingSequences, getBufferSize, getCursor, getMinimumSequence, newBarrier, newPoller, removeGatingSequence, toString
protected long p1
protected long p2
protected long p3
protected long p4
protected long p5
protected long p6
protected long p7
protected long nextValue
protected long cachedValue
public SingleProducerSequencer(int bufferSize, WaitStrategy waitStrategy)
bufferSize
- the size of the buffer that this will sequence over.waitStrategy
- for those waiting on sequences.public boolean hasAvailableCapacity(int requiredCapacity)
Sequenced
requiredCapacity
- in the bufferSequenced.hasAvailableCapacity(int)
public long next()
Sequenced
Sequenced.next()
public long next(int n)
Sequenced
int n = 10; long hi = sequencer.next(n); long lo = hi - (n - 1); for (long sequence = lo; sequence <= hi; sequence++) { // Do work. } sequencer.publish(lo, hi);
n
- the number of sequences to claimSequenced.next(int)
public long tryNext() throws InsufficientCapacityException
Sequenced
requiredCapacity
slots
available.InsufficientCapacityException
Sequenced.tryNext()
public long tryNext(int n) throws InsufficientCapacityException
Sequenced
requiredCapacity
slots
available. Have a look at Sequenced.next()
for a description on how to
use this method.n
- the number of sequences to claimInsufficientCapacityException
Sequenced.tryNext(int)
public long remainingCapacity()
Sequenced
Sequenced.remainingCapacity()
public void claim(long sequence)
Sequencer
sequence
- The sequence to initialise too.Sequencer.claim(long)
public void publish(long sequence)
Sequenced
Sequenced.publish(long)
public void publish(long lo, long hi)
Sequenced
lo
- first sequence number to publishhi
- last sequence number to publishSequenced.publish(long, long)
public boolean isAvailable(long sequence)
Sequencer
sequence
- of the buffer to checkSequencer.isAvailable(long)
public long getHighestPublishedSequence(long lowerBound, long availableSequence)
Sequencer
>= nextSequence
the return value will be
nextSequence - 1
. To work correctly a consumer should pass a value that
it 1 higher than the last sequence that was successfully processed.lowerBound
- The sequence to start scanning from.availableSequence
- The sequence to scan to.nextSequence - 1
.Copyright © 2020. All Rights Reserved.