public final class MultiProducerSequencer extends AbstractSequencer
Coordinator for claiming sequences for access to a data structure while tracking dependent Sequences.
Suitable for use for sequencing across multiple publisher threads.
*
Note on Cursored.getCursor(): With this sequencer the cursor value is updated after the call
to Sequenced.next(), to determine the highest available sequence that can be read, then
Sequencer.getHighestPublishedSequence(long, long) should be used.
bufferSize, cursor, gatingSequences, waitStrategyINITIAL_CURSOR_VALUE| 构造器和说明 |
|---|
MultiProducerSequencer(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, toStringpublic MultiProducerSequencer(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 void claim(long sequence)
Sequencersequence - The sequence to initialise too.Sequencer.claim(long)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 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.