BlockingQueue-一个生产者多个消费者

问题描述 投票:0回答:1

我有三个线程。线程1(T1)是生产者,它生成数据。线程2和3(分别为T2,T3)分别等待T1的数据在单独的循环中进行处理。我正在考虑在线程之间共享BlockingQueue,并通过调用“ take”使T2和T3等待。

java.util.concurrent.BlockingQueue的docs说它可以“安全地与多个生产者和多个消费者一起使用”。从文档中尝试该示例,似乎行为是允许一个使用者“获取”“ put”对象,而不是让所有消费者都接收它。因此,T2或T3都会获取数据,并且看起来好像它们交替出现。我希望当T1放入一些数据时,他们两个都获得相同的数据。

我的问题是,BlockingQueue是正确的方法吗?我是否应该以不同的方式考虑这个问题?

java multithreading thread-safety producer-consumer blockingqueue
1个回答
0
投票

类似于Publish-Subscribe之类的声音,您将数据发布到一个主题,并且所有注册的使用者都收到消息的副本。相反,队列仅将消息传递给单个注册使用者。我建议您重新考虑该组件的设计。

C0],顾名思义是BlockingQueue实现,是一个允许添加和检查对象的队列。这些操作是线程安全的,这意味着,例如,没有两个线程在检查时会收到同一对象。

© www.soinside.com 2019 - 2024. All rights reserved.