【发布时间】:2012-05-19 00:46:34
【问题描述】:
有谁知道有界并发循环队列的(开源)实现,或内置于 android/java 中的可用 API 类?
这个集合我需要的并发(非同步或基于锁)操作至少是 enqueue 和 dequeue ,但 enqueue 也足够了。
对于那些不确定我需要的收藏的人,这里有更多信息:
- bounded - 有最大数量的项目可以在里面。
- 并发 - 允许多个线程高效运行操作而无需任何类型的锁定。这与同步解决方案相反,它只允许单个线程运行操作。
- 循环 - 如果我们将项目放入已填充的集合中,新项目将替换最旧的项目。
请帮忙
【问题讨论】:
-
听起来你应该只复制
ArrayBlockingQueue.java(它在框架源代码中可用)并更改#offer(T)和#put(T)方法以使最后一个项目出列 - 和presto - 即时有界队列驱逐最后一项。 -
@Jens - ArrayBlockingQueue 不允许多线程并发访问,从来源来看。
-
正确。不仅如此,而且它也不是循环的:如果您尝试将一个项目放入已填充的队列中,它将等待它直到它没有被填充,反之亦然 - 如果你试图从一个空队列中获取一个项目,它会一直等待它直到它不为空。
-
ArrayBlockingQueue
#offer(T)是非阻塞的,就像#poll()- 阻塞版本分别是#put(T)和#take()- 所以 是的,它们被使用了当您需要并发的非阻塞轮询和报价时.. @androiddeveloper:是的,这就是为什么您必须复制和修改源以在队列已满时出列。 -
“并发 - 允许多个线程在没有任何锁定的情况下高效地运行操作”——根据定义,这是不可能的。