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]); } 现在你的消费者都可以阻挡在生产者生产者上.我不知道这个策略是多么有价值,但它完成了你想要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |