BlockingQueue - 一个生产者多个消费者
BlockingQueue - one producer multiple consumers
我有三个线程。线程 1 (T1) 是生产者,它生成数据。线程 2 和 3(分别为 T2、T3)各自等待 T1 的数据在单独的循环中进行处理。我正在考虑在线程之间共享一个 BlockingQueue,并通过调用 "take".
让 T2 和 T3 等待
docs 为 java.util.concurrent.BlockingQueue 说可以 "safely be used with multiple producers and multiple consumers"。尝试文档中的示例,似乎行为是允许一个消费者 "take" "put" 对象,而不是所有人都接收它。因此,T2 或 T3 获取数据并且看起来好像它们交替出现。当T1放一些数据时,我希望他们都得到相同的数据。
我的问题是,BlockingQueue 是正确的方法吗?我应该以不同的方式考虑这个问题吗?
听起来像发布-订阅,您将数据发布到主题,所有注册的消费者都会收到消息的副本。相反,队列仅将消息传递给单个已注册的消费者。我建议你重新考虑那个组件的设计。
BlockingQueue
,本质上是一个 Queue
实现,顾名思义,是一个允许添加和检查对象的队列。这些操作是线程安全的,这意味着例如在检查时没有两个线程会收到相同的对象。
我有三个线程。线程 1 (T1) 是生产者,它生成数据。线程 2 和 3(分别为 T2、T3)各自等待 T1 的数据在单独的循环中进行处理。我正在考虑在线程之间共享一个 BlockingQueue,并通过调用 "take".
让 T2 和 T3 等待docs 为 java.util.concurrent.BlockingQueue 说可以 "safely be used with multiple producers and multiple consumers"。尝试文档中的示例,似乎行为是允许一个消费者 "take" "put" 对象,而不是所有人都接收它。因此,T2 或 T3 获取数据并且看起来好像它们交替出现。当T1放一些数据时,我希望他们都得到相同的数据。
我的问题是,BlockingQueue 是正确的方法吗?我应该以不同的方式考虑这个问题吗?
听起来像发布-订阅,您将数据发布到主题,所有注册的消费者都会收到消息的副本。相反,队列仅将消息传递给单个已注册的消费者。我建议你重新考虑那个组件的设计。
BlockingQueue
,本质上是一个 Queue
实现,顾名思义,是一个允许添加和检查对象的队列。这些操作是线程安全的,这意味着例如在检查时没有两个线程会收到相同的对象。