小编典典

Java并发队列进行广播?

java

我有一堆添加到的生产者线程BlockingQueue和一个接收对象的工作线程。现在,我想扩展它,以使两个工作线程可以接收对象,但是对对象执行不同的工作。这是一个转折:
我希望 两个 接收线程都处理已放在队列中的对象

如果我继续使用BlockingQueue,则两个线程将争用对象,只有一个工作线程将获取对象。

因此,我正在寻找类似于BlockingQueue的东西,但是具有广播行为。

应用程序:生产者线程实际上是在创建性能度量,并且其中一个工作线程正在将度量写入文件,而另一个工作线程正在汇总统计信息。

我正在使用Java 6。

这样的机制存在吗?在Java SE中?别处?还是我需要自己编写代码?

我正在寻找占地面​​积小的解决方案-我不希望安装一些框架​​来做到这一点。


阅读 274

收藏
2020-11-26

共1个答案

小编典典

一种选择:具有 三个 阻塞队列。您的主要生产者将项目放入“广播”队列。然后,您拥有 队列的使用者,
使用者消耗每个项目,并将其放入其他两个队列中,每个队列都由一个使用者进行服务:

                                   Q2
                                  ---- Real Consumer 1
          Q1                     /
Producer ---- Broadcast Consumer
                                 \
                                  ---- Real Consumer 2
                                   Q3

另外,您可以给生产者两个阻塞队列,然后让它把它生产的项目放入两个队列中。这不太优雅,但总体上稍微简单一些:)

2020-11-26