java.lang.Object
cn.wjybxx.disruptor.SingleConsumerBarrier
- 所有已实现的接口:
ConsumerBarrier,SequenceBarrier
单线程消费者屏障
- 作者:
- wjybxx date - 2024/1/18
-
字段概要
从接口继承的字段 cn.wjybxx.disruptor.SequenceBarrier
INITIAL_SEQUENCE -
构造器概要
构造器构造器说明SingleConsumerBarrier(ProducerBarrier producerBarrier, WaitStrategy waitStrategy, SequenceBarrier... dependentBarriers) -
方法概要
修饰符和类型方法说明voidaddDependentBarriers(SequenceBarrier... barriersToTrack) 添加当前屏障需要追踪的屏障。voidalert()通知屏障关联的生产者/消费者状态产生变化,该信号将保留至被清理 --ConsumerBarrier.clearAlert()。void检查【屏障】的的alert状态,如果收到信号,则抛出AlertException。voidclaim(long sequence) 已过时。void清除【屏障】的alert状态。long获取当前屏障【依赖的生产者或消费者】的序号。获取生产者组/消费者组用的Sequence。boolean【当前屏障】是否收到了Alert信号memberSequence(int index) 获取消费者成员的sequence (反转依赖)longbooleanremoveDependentBarrier(SequenceBarrier barrier) 移除这些屏障,不再跟踪它们的进度信息; 特殊用法:如果移除了所有的消费者,那么生产者便不会被阻塞,也就能ProducerBarrier.next()死循环中醒来!longsequence()当前Barrier关联的【生产或消费】进度。longwaitFor(long sequence) 等待给定的序号可消费
-
构造器详细资料
-
SingleConsumerBarrier
public SingleConsumerBarrier(ProducerBarrier producerBarrier, WaitStrategy waitStrategy, SequenceBarrier... dependentBarriers) - 参数:
producerBarrier- 生产者屏障waitStrategy- 该组消费者的等待策略dependentBarriers- 依赖的屏障
-
-
方法详细资料
-
waitFor
从接口复制的说明:ConsumerBarrier等待给定的序号可消费警告:多生产者模式下该操作十分消耗性能,如果在
waitFor获取sequence之后不完全消费, 而是每次消费一点,再拉取一点,则会在该操作上形成巨大的开销 —— 极端情况是每次拉取1个,性能将差到极致。 建议的的方式:先拉取到本地,然后在本地分批处理,避免频繁调用waitFor。- 指定者:
waitFor在接口中ConsumerBarrier- 参数:
sequence- 期望消费的序号- 返回:
- 当前可用的最大序号;返回值小于期望的sequence时表示超时,通常为
sequence - 1。 - 抛出:
AlertException- if a status change has occurred for the DisruptorInterruptedException- if the thread needs awaking on a condition variable.
-
isAlerted
public boolean isAlerted()从接口复制的说明:ConsumerBarrier【当前屏障】是否收到了Alert信号- 指定者:
isAlerted在接口中ConsumerBarrier- 返回:
- 如果收到了终止信号,则返回true,否则返回false
-
alert
public void alert()从接口复制的说明:ConsumerBarrier通知屏障关联的生产者/消费者状态产生变化,该信号将保留至被清理 --ConsumerBarrier.clearAlert()。 1. 该信号的作用类似于线程的中断信号,通常用于停止线程。 2. 用于其它目的时请慎重。- 指定者:
alert在接口中ConsumerBarrier
-
clearAlert
public void clearAlert()从接口复制的说明:ConsumerBarrier清除【屏障】的alert状态。- 指定者:
clearAlert在接口中ConsumerBarrier
-
checkAlert
从接口复制的说明:ConsumerBarrier检查【屏障】的的alert状态,如果收到信号,则抛出AlertException。- 指定者:
checkAlert在接口中ConsumerBarrier- 抛出:
AlertException- if alert has been raised.
-
claim
已过时。从接口复制的说明:SequenceBarrier设置当前屏障的序号。 1. 仅在初始化屏障时使用。 2. 这是个很危险的方法,避免在运行中使用,否则可能导致错误。 3. 屏障的默认初始值为SequenceBarrier.INITIAL_SEQUENCE。- 指定者:
claim在接口中SequenceBarrier- 参数:
sequence- 要初始化的值
-
memberSequence
从接口复制的说明:ConsumerBarrier获取消费者成员的sequence (反转依赖)- 指定者:
memberSequence在接口中ConsumerBarrier- 参数:
index- 消费者索引
-
groupSequence
从接口复制的说明:SequenceBarrier获取生产者组/消费者组用的Sequence。 1. 生产者/消费者通过更新该Sequence更新屏障的进度。 2. 如果当前屏障是一个视图对象,而不是真正用于工作的屏障,该方法应当抛出异常,而不是创建一个虚假的Sequence。- 指定者:
groupSequence在接口中SequenceBarrier
-
sequence
public long sequence()从接口复制的说明:SequenceBarrier当前Barrier关联的【生产或消费】进度。 上游需要感知当前Barrier的消费进度 -- 计算它的SequenceBarrier.dependentSequence()- 指定者:
sequence在接口中SequenceBarrier- 返回:
- 进度
-
dependentSequence
public long dependentSequence()从接口复制的说明:SequenceBarrier获取当前屏障【依赖的生产者或消费者】的序号。生产者
1.对生产者而言,这是下一个可写数据的序号。 2.可能没有消费者,因此生产者可能没有依赖。消费者
1.对消费者而言:这是下一个可消费数据的序号。 2.消费者可依赖生产者和其它消费者,该序号为所有依赖的最小序号。 3.依赖其它消费者时,依赖的是其已消费的序号 -- 确保可见性。- 指定者:
dependentSequence在接口中SequenceBarrier- 返回:
- 所有依赖的最小序号;没有依赖的情况下返回
Long.MAX_VALUE
-
minimumSequence
public long minimumSequence()从接口复制的说明:SequenceBarrier- 指定者:
minimumSequence在接口中SequenceBarrier
-
addDependentBarriers
从接口复制的说明:SequenceBarrier添加当前屏障需要追踪的屏障。 当前屏障关联的生产者或消费者会持续最终他们的进度,以保证数据生产或消费的正确性。ps:生产者的要追踪屏障通常是动态的,消费者要追踪的屏障通常在构造时指定。
- 指定者:
addDependentBarriers在接口中SequenceBarrier- 参数:
barriersToTrack- 要追踪的屏障
-
removeDependentBarrier
从接口复制的说明:SequenceBarrier移除这些屏障,不再跟踪它们的进度信息; 特殊用法:如果移除了所有的消费者,那么生产者便不会被阻塞,也就能ProducerBarrier.next()死循环中醒来!- 指定者:
removeDependentBarrier在接口中SequenceBarrier- 参数:
barrier- 要删除的屏障- 返回:
- 如果给定barrier存在且删除成功则返回true,否则返回false。
-