【发布时间】:2012-12-19 00:19:45
【问题描述】:
我使用 Java 的 LinkedBlockingDeque 实现了生产者-消费者模式,但我遇到了一个问题,即我有时想将一个项目(已经在队列中的某处)移动到队列的前面,以便更快地处理它.我永远不知道哪些已经排队的项目适合移到前面。因此,我希望将 LinkedBlockingDeque 替换为可以重新排序项目的东西。我有一个生产者和 2-4 个消费者(自定义线程实现),我在 Android 平台上。我怎样才能做到这一点?一些阻塞的双连接链表?
【问题讨论】:
-
你能不能只做remove(Object o),在remove后检索对象,然后addFirst(Object o)。您使用迭代器检查 Deque 中的对象。
-
我是这样做的,效果很好。如果它足够靠近前面,我想要一个不移动项目的功能,所以我不会得到不必要的删除。有没有一种快速的方法(使用 LinkedBlockingDeque)来检查队列中的项目有多远?快速我的意思是 O(1),最大 O(log N) 并且不复制整个队列。
-
@Tom Cammann 如果您将该评论作为答案发布,我将接受它,因为这是我收到的最佳建议
标签: java android concurrency