加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:24:59 所属栏目:Java 来源:网络整理
导读:我有多个BlockingQueues包含要发送的消息.队列的消费者是否有可能减少?我不想循环队列并继续轮询他们(忙等待),我不想要每个队列的线程.相反,我想有一个线程在任何队列上有消息可用时被唤醒. 解决方法 你可以做的一个技巧是排队队列.所以你会做的是一个单个
我有多个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]);
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读