gpt4 book ai didi

java - 多个阻塞队列,单个消费者

转载 作者:太空狗 更新时间:2023-10-29 22:35:11 24 4
gpt4 key购买 nike

我有多个包含要发送的消息的 BlockingQueues。有没有可能有比队列更少的消费者?我不想遍历队列并继续轮询它们(忙等待),我也不希望每个队列都有一个线程。相反,我希望有一个线程在任何队列上有一条消息可用时被唤醒。

最佳答案

LinkedBlockingMultiQueue做你要求的。它不允许消费者阻塞任意 BlockingQueues,但可以从单个“多队列”创建“子队列”并达到相同的效果。生产者在子队列中提供,消费者可以阻止自己轮询单个多队列,等待任何元素。

它还支持优先级,即先从一些队列中取出元素,然后再考虑其他队列。

例子:

LinkedBlockingMultiQueue<Int, String> q = new LinkedBlockingMultiQueue<>();
q.addSubQueue(1 /* key */, 10 /* priority */);
q.addSubQueue(2 /* key */, 10 /* priority */);
LinkedBlockingMultiQueue<Int, String>.SubQueue sq1 = q.getSubQueue(1);
LinkedBlockingMultiQueue<Int, String>.SubQueue sq2 = q.getSubQueue(2);

然后您可以提供和投票:

sq1.offer("x1");
q.poll(); // "x1"
sq2.offer("x2");
q.poll(); // "x2"

免责声明:我是图书馆的作者。

关于java - 多个阻塞队列,单个消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588233/

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