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

前端之家收集整理的这篇文章主要介绍了java – 多个阻塞队列,单个消费者前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有多个BlockingQueues包含要发送的消息.队列的消费者是否有可能减少?我不想循环队列并继续轮询他们(忙等待),我不想要每个队列的线程.相反,我想有一个线程在任何队列上有消息可用时被唤醒.

解决方法

你可以做的一个技巧是排队队列.所以你会做的是一个单个的阻止队列,所有的线程订阅.然后当您将某些内容排入某个BlockingQueue时,您也会将此阻塞队列排入队列.所以你会有这样的东西:
BlockingQueue<WorkItem> producers[] = new BlockingQueue<WorkItem>[NUM_PRODUCERS];
BlockingQueue<BlockingQueue<WorkItem>> producerProducer = new BlockingQueue<BlockingQueue<WorkItem>>();

然后当你得到一个新的工作项目:

void addWorkItem(int queueIndex,WorkItem workItem) {
    assert queueIndex >= 0 && queueIndex < NUM_PRODUCERS : "Pick a valid number";
    //Note: You may want to make the two operations a single atomic operation
    producers[queueIndex].add(workItem);
    producerProducer.add(producers[queueIndex]);
}

现在你的消费者都可以阻挡在生产者生产者上.我不知道这个策略是多么有价值,但它完成了你想要的.

原文链接:https://www.f2er.com/java/122640.html

猜你在找的Java相关文章