public final class SingleProducerSequencer extends AbstractSequencer
Coordinator for claiming sequences for access to a data structure while tracking dependent Sequences.
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.
| 限定符和类型 | 字段和说明 |
|---|---|
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, waitStrategyINITIAL_CURSOR_VALUE| 构造器和说明 |
|---|
SingleProducerSequencer(int bufferSize,
WaitStrategy waitStrategy)
Construct a Sequencer with the selected wait strategy and buffer size.
|
| 限定符和类型 | 方法和说明 |
|---|---|
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, toStringprotected 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)
SequencedrequiredCapacity - in the bufferSequenced.hasAvailableCapacity(int)public long next()
SequencedSequenced.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
SequencedrequiredCapacity slots
available.InsufficientCapacityException - InsufficientCapacityExceptionSequenced.tryNext()public long tryNext(int n)
throws InsufficientCapacityException
SequencedrequiredCapacity slots
available. Have a look at Sequenced.next() for a description on how to
use this method.n - the number of sequences to claimInsufficientCapacityException - InsufficientCapacityExceptionSequenced.tryNext(int)public long remainingCapacity()
SequencedSequenced.remainingCapacity()public void claim(long sequence)
Sequencersequence - The sequence to initialise too.Sequencer.claim(long)public void publish(long sequence)
Sequencedsequence - sequenceSequenced.publish(long)public void publish(long lo,
long hi)
Sequencedlo - first sequence number to publishhi - last sequence number to publishSequenced.publish(long, long)public boolean isAvailable(long sequence)
Sequencersequence - 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 © 2018 Pivotal Software, Inc.. All rights reserved.