首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生产者-消费者队列,能够将项目移动到最前面

生产者-消费者队列,能够将项目移动到最前面
EN

Stack Overflow用户
提问于 2012-12-19 08:19:46
回答 2查看 693关注 0票数 1

我用Java的LinkedBlockingDeque实现了生产者-消费者模式,但我遇到了一个问题,我有时想把一个项目(已经在队列中的某个地方)移到队列的前面,这样它就能更快地被处理。我从来不知道哪些已经排好队的项目可以移到最前面。因此,我希望将LinkedBlockingDeque替换为可以对项目进行重新排序的内容。我有一个生产者和2-4个消费者(自定义线程实现),我在Android平台上。我该怎么做呢?一些阻塞的双连接链表?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 18:48:19

来自我的评论:

您可以使用remove(Object o)检索对象并将其从队列中删除,然后使用addFirst(Object o)将其添加到队列的前面。这将具有确定此对象的优先级的效果。

您可以使用迭代器来检查Deque中有哪些对象。但是要非常小心ConcurrentModificationException,因为如果你在一个线程中访问集合并在另一个线程中修改它,它们可能会被引发,但是如果你使用的是blockingQueue,这应该不是问题。

BlockingQueue Javadoc:

BlockingQueue实现是线程安全的。所有队列方法都使用内部锁或其他形式的并发控制自动实现它们的效果。但是,除非在实现中另有指定,否则不一定以原子方式执行批量收集操作addAll、containsAll、retainAll和removeAll。因此,例如,在仅添加了c.

中的一些元素之后,addAll(c)就有可能失败(抛出异常)

票数 0
EN

Stack Overflow用户

发布于 2012-12-19 08:28:04

看看PriorityBlockingQueue吧。它可能会满足你的需要。您可以插入具有名义优先级的项,然后当您想要调整元素的一些优先级时,您可以将其从队列中删除,并使用新的优先级重新添加它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13943662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档