java - BlockingQueue - 仅获取特定对象。

标签 java concurrency blockingqueue

我有以下阻塞队列;

  final BlockingQueue<Message> blockingQueue = new LinkedBlockingQueue<Message>();

在哪里

public class Message {
    private String author;
    private String text;
        .......
//setters and getters
.....
}

我有一个将消息放入队列的生产者。

现在我的目标是创建能够从队列中获取特定作者特定消息的消费者?是否可以?

如果不是,还有什么可以替代 BlockingQueue?

最佳答案

您可以使用 ConcurrentMap<String,BlockingQueue<Message>>其中字符串是 author

ConcurrentMap<String,BlockingQueue<Message>> map = ...;
public Message consume(String str){
  return map.get(str).take();
}
public void produce(Message message){
  map.get(message.getAuthor()).put(message);
}

这将需要每个作者有一个唯一的 BlockingQueue。

关于java - BlockingQueue - 仅获取特定对象。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774937/

相关文章:

java - 具有约束的 Java 中的并发请求处理

java - 如何使用 AtomicBoolean 阻塞和等待

multithreading - 具有高并发执行的 Golang http.Client 中的 panic

multithreading - 如何正确终止阻塞的线程(Lparallel Common Lisp)

java - 如何避免多生产者和消费者的饥饿?

java - 在 Java 中使用 SSL 调用 WS

java - 预期错误消息 : ´)´expected, 和 "not a statement"´;´

java - 独立于平台的文件系统,我可以在其中接收对文件系统所做的任何更改

java - 正则表达式 - 如何识别字符串 + 空格 + 字符串

java - 如何在 ForkJoinPool 中阻塞队列?