- 所有已知实现类:
MpUnboundedBufferSequencer,MultiProducerSequencer,RingBufferSequencer,SingleProducerSequencer
public interface Sequencer
序号生成器
1. 序号生成器是生产者和消费者协调的集成。
2. 不继承
ProducerBarrier是为了避免暴露不必要的接口给等待策略等。
安全停止
要安全停止整个系统,必须调用所有消费者的ConsumerBarrier.alert()方法停止消费者,
然后调用SequenceBarrier.removeDependentBarrier(SequenceBarrier)从生产者要追踪的屏障中删除。
否则会导致死锁!!!
ps: Sequencer默认不追踪所有的SequenceBarrier,因此依赖用户进行管理。- 作者:
- wjybxx date - 2024/1/16
-
方法概要
修饰符和类型方法说明default voidaddGatingBarriers(SequenceBarrier... gatingBarriers) 添加序号生成器需要追踪的网关屏障(新增的末端消费者消费序列/进度), Sequencer(生产者)会持续跟踪它们的进度信息,以协调生产者和消费者之间的速度。获取生产者屏障 --用于生产者申请和发布数据。默认等待策略default ConsumerBarriernewMultiConsumerBarrier(int workerCount, SequenceBarrier... barriersToTrack) 使用默认的等待策略创建一个【多线程消费者】使用的屏障。default ConsumerBarriernewMultiConsumerBarrier(int workerCount, WaitStrategy waitStrategy, SequenceBarrier... barriersToTrack) 使用默认的等待策略创建一个【多线程消费者】使用的屏障。default ConsumerBarriernewSingleConsumerBarrier(SequenceBarrier... barriersToTrack) 使用默认的等待策略创建一个【单线程消费者】使用的屏障。default ConsumerBarriernewSingleConsumerBarrier(WaitStrategy waitStrategy, SequenceBarrier... barriersToTrack) 使用给定的等待策略创建一个【单线程消费者】使用的屏障。default booleanremoveGatingBarrier(SequenceBarrier gatingBarrier) 移除这些网关屏障,不再跟踪它们的进度信息; 特殊用法:如果移除了所有的消费者,那么生产者便不会被阻塞,就能从ProducerBarrier.next()中退出。
-
方法详细资料
-
addGatingBarriers
添加序号生成器需要追踪的网关屏障(新增的末端消费者消费序列/进度), Sequencer(生产者)会持续跟踪它们的进度信息,以协调生产者和消费者之间的速度。 即生产者想使用一个序号时必须等待所有的网关Sequence处理完该序号。Add the specified gating sequences to this instance of the Disruptor. They will safely and atomically added to the list of gating sequences.
- 参数:
gatingBarriers- The sequences to add.
-
removeGatingBarrier
移除这些网关屏障,不再跟踪它们的进度信息; 特殊用法:如果移除了所有的消费者,那么生产者便不会被阻塞,就能从ProducerBarrier.next()中退出。Remove the specified gatingBarrier from this sequencer.
- 参数:
gatingBarrier- to be removed.- 返回:
- true if this gatingBarrier was found, false otherwise.
-
getWaitStrategy
默认等待策略 -
getProducerBarrier
ProducerBarrier getProducerBarrier()获取生产者屏障 --用于生产者申请和发布数据。 -
newSingleConsumerBarrier
使用默认的等待策略创建一个【单线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。- 参数:
barriersToTrack- 该组消费者依赖的屏障- 返回:
- 默认的消费者屏障
-
newSingleConsumerBarrier
default ConsumerBarrier newSingleConsumerBarrier(WaitStrategy waitStrategy, SequenceBarrier... barriersToTrack) 使用给定的等待策略创建一个【单线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。- 参数:
waitStrategy- 该组消费者的等待策略barriersToTrack- 该组消费者依赖的屏障- 返回:
- 默认的消费者屏障
-
newMultiConsumerBarrier
default ConsumerBarrier newMultiConsumerBarrier(int workerCount, SequenceBarrier... barriersToTrack) 使用默认的等待策略创建一个【多线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。- 参数:
workerCount- 消费者数量barriersToTrack- 该组消费者依赖的屏障- 返回:
- 默认的消费者屏障
-
newMultiConsumerBarrier
default ConsumerBarrier newMultiConsumerBarrier(int workerCount, WaitStrategy waitStrategy, SequenceBarrier... barriersToTrack) 使用默认的等待策略创建一个【多线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。- 参数:
workerCount- 消费者数量waitStrategy- 该组消费者的等待策略barriersToTrack- 该组消费者依赖的屏障- 返回:
- 默认的消费者屏障
-