java - 具有消费者过滤功能的生产者-消费者阻塞队列

标签 java producer-consumer blockingqueue

我正在尝试用 Java 编写生产者-消费者模式。我是一个网络客户端,通过一系列不同的连接连接到许多服务器。服务器产生不同的“工作”数据包,所有这些数据包都被放入一个阻塞队列中。我想做的是以一种只将特定类型的工作数据包传递给特定消费者的方式来阻止我的消费者。

例子:

  • 阻塞队列中填充了三种不同类型的工作包对象:A、B、C
  • 两个消费者正在等待工作包对象。消费者 1 只想要类型 A,消费者 2 只想要类型 B 或 C

java.util 中是否有一些标准类...或者我是否必须推出自己的类?另外,如果需要,我自己做滚动的最佳方法是什么?

提前致谢!

安德鲁·克洛法斯

最佳答案

在 java.util 中没有执行此操作的标准方法,但这里有一个简单的设计:

我假设 A、B、C 都实现接口(interface) D,并且 A 是否与 B 和 C 乱序处理无关紧要。

有一个带有一组排序消费者的单一“输入”BlockingQueue。这些消费者确定队列中对象的类型,并将它们提供给您的实际工作人员从中获取的单独的特定于类型的“输出”队列。是否有一些限制要求您只有一个队列?

关于java - 具有消费者过滤功能的生产者-消费者阻塞队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423081/

相关文章:

java - 返回 'dataBytes' 可能会暴露一个内部数组

java - 为什么我的生产者消费者程序结束了?

java - 等待直到阻塞队列已满

java - 队列已满,阻塞队列的深度,需要澄清

java - 如何绑定(bind)更改按钮和 RGB slider JavaFX

java - JPA : How to define @NamedEntityGraph for 3 levels?

java - 当 ArrayList 中删除索引时,如何自动删除 JPanel 上的形状?

c# - RabbitMQ 传输速率加快?

python - Kafka Consumer未获取所有消息

java - 为什么 LogWriter 中的竞争条件会导致生产者阻塞? [实践中的并发]