【发布时间】:2012-07-10 22:40:40
【问题描述】:
我正在尝试在 java 中编写生产者-消费者模式。我是一个网络客户端,通过一系列不同的连接连接到许多服务器。服务器产生不同的“工作”数据包,这些数据包都被放入一个阻塞队列。我正在尝试以一种只有特定类型的工作包交付给特定消费者的方式阻止我的消费者。
例子:
- 阻塞队列中填充了三种不同类型的工作包对象:A、B、C
- 两个消费者正在等待工作包对象。消费者 1 只想要 A 型,消费者 2 只想要 B 型或 C 型
java.util 中是否有一些标准类...或者我必须推出自己的类?另外,如果需要的话,最好的方式是什么?
提前致谢!
安德鲁·克洛法斯
【问题讨论】:
-
你需要在你的阻塞队列和你的消费者之间有一些东西将数据包“路由”到正确的消费者。或者,您可以为每个消费者提供自己的阻塞队列,并根据数据包类型填充队列。
-
为什么要使用一个阻塞队列?还是存在无法确定的“工作类型”?
-
类型的数量不确定。我想做的是有一些专门的消费者来响应特定的工作类型,然后是一个包罗万象的消费者。
-
这听起来更像是发布-订阅
-
使用这种设计,如果您有一个没有人愿意使用的消息类型 X,您将冒着填满队列的风险。
标签: java producer-consumer blockingqueue