单个生产者,多个阻塞队列,多个消费者

时间:2020-04-23 22:58:45

标签: java multithreading algorithm producer-consumer blockingqueue

Architecture

生产者查看每种消息类型,并根据该ArrayBlockingQueue中的可用空间路由到任何Queue。只有两种类型的消息:类型1或类型2。给定的队列只能包含一种类型的消息。我想构建一个可以具有“ m”个队列的系统,其中的一些队列将包含Type 1消息,其余的队列将包含Type 2消息。现在,每个队列可以有一个或多个消费者从中读取。 Queue到使用者的映射为1:n。每个使用者将只消耗1个队列。

现在,我想要的功能是这样:

  1. 如果甚至有一个队列中有空间,则生产者应put()向该队列中发送一条消息。仅当所有队列都已满时,生产者才应在put()上阻塞。
  2. 只要队列中有一条消息,所有在给定队列中等待的使用者都应该能够从队列中take()并获得自己的消息。
  3. 没有消息可以由多个使用者线程处理。

ArrayBlockingQueue是否可行且优雅?还是对此问题有更好的解决方案?

0 个答案:

没有答案