gpt4 book ai didi

java - 普通 Java 中类似主题的并发队列

转载 作者:行者123 更新时间:2023-11-29 06:13:11 29 4
gpt4 key购买 nike

在我重新发明轮子之前,纯Java中有类似主题的并发队列吗?我有以下要求:

  • 多个读者/消费者
  • 多名作家/制片人
  • 每条消息都必须由每个(活跃的)消费者消费
  • 在每个消费者阅读一条消息后,它应该变成垃圾(即不再有引用)
  • 写入队列不应该是O(N)到消费者的数量
  • 并发,最好是非阻塞的
  • 不基于 JMS:它适用于更轻便/可嵌入的环境

这几乎就是我需要的一切。有什么指点吗?

最佳答案

基本上你是在谈论多路复用,不,标准库中没有任何东西,但创建一个非常简单。假设您的客户对订阅之前发布的消息不感兴趣,那么您需要为每个消费者提供一个队列池,而发布者只需将项目提供给每个队列:

public class Multiplexer<M> {
private final List<BlockingQueue<M>> consumers
= new CopyOnWriteArrayList<BlockingQueue<M>>();

public void publish(M msg) {
for (BlockingQueue<M> q : consumers) {
q.offer(msg);
}
}

public void addConsumer(BlockingQueue<M> consumer) {
consumers.add(consumer);
}
}

此版本允许消费者使用他们可能想要的任何阻塞队列实现。如果需要,您显然可以为客户端提供标准实现和漂亮的界面。

关于java - 普通 Java 中类似主题的并发队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051647/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com