接口 Sequencer

所有已知实现类:
MpUnboundedBufferSequencer, MultiProducerSequencer, RingBufferSequencer, SingleProducerSequencer

public interface Sequencer
序号生成器 1. 序号生成器是生产者和消费者协调的集成。 2. 不继承ProducerBarrier是为了避免暴露不必要的接口给等待策略等。

安全停止

要安全停止整个系统,必须调用所有消费者的ConsumerBarrier.alert()方法停止消费者, 然后调用SequenceBarrier.removeDependentBarrier(SequenceBarrier)从生产者要追踪的屏障中删除。 否则会导致死锁!!! ps: Sequencer默认不追踪所有的SequenceBarrier,因此依赖用户进行管理。
作者:
wjybxx date - 2024/1/16
  • 方法详细资料

    • addGatingBarriers

      default void addGatingBarriers(SequenceBarrier... gatingBarriers)
      添加序号生成器需要追踪的网关屏障(新增的末端消费者消费序列/进度), 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

      default boolean removeGatingBarrier(SequenceBarrier gatingBarrier)
      移除这些网关屏障,不再跟踪它们的进度信息; 特殊用法:如果移除了所有的消费者,那么生产者便不会被阻塞,就能从ProducerBarrier.next()中退出。

      Remove the specified gatingBarrier from this sequencer.

      参数:
      gatingBarrier - to be removed.
      返回:
      true if this gatingBarrier was found, false otherwise.
    • getBlocker

      @Nullable SequenceBlocker getBlocker()
      获取用于阻塞等待序号的阻塞器。 1.可能为null,如果整个系统禁用了基于锁的条件等待。 2.用于创建消费者屏障。
    • getWaitStrategy

      @Nonnull WaitStrategy getWaitStrategy()
      默认等待策略
    • getProducerBarrier

      ProducerBarrier getProducerBarrier()
      获取生产者屏障 --用于生产者申请和发布数据。
    • newSingleConsumerBarrier

      default ConsumerBarrier newSingleConsumerBarrier(SequenceBarrier... barriersToTrack)
      使用默认的等待策略创建一个【单线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。
      参数:
      barriersToTrack - 该组消费者依赖的屏障
      返回:
      默认的消费者屏障
    • newSingleConsumerBarrier

      default ConsumerBarrier newSingleConsumerBarrier(WaitStrategy waitStrategy, SequenceBarrier... barriersToTrack)
      使用给定的等待策略创建一个【单线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。
      参数:
      waitStrategy - 该组消费者的等待策略
      barriersToTrack - 该组消费者依赖的屏障
      返回:
      默认的消费者屏障
    • newMultiConsumerBarrier

      default ConsumerBarrier newMultiConsumerBarrier(int workerCount, SequenceBarrier... barriersToTrack)
      使用默认的等待策略创建一个【多线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。
      参数:
      barriersToTrack - 该组消费者依赖的屏障
      返回:
      默认的消费者屏障
    • newMultiConsumerBarrier

      default ConsumerBarrier newMultiConsumerBarrier(int workerCount, WaitStrategy waitStrategy, SequenceBarrier... barriersToTrack)
      使用默认的等待策略创建一个【多线程消费者】使用的屏障。 ps: 用户可以创建自己的自定义实例。
      参数:
      waitStrategy - 该组消费者的等待策略
      barriersToTrack - 该组消费者依赖的屏障
      返回:
      默认的消费者屏障