JAVA中哪个能同时满足 先进先出(增减操作非常频繁)和同步安全的容器集合?并在性能上不至于太差

 我来答
lawuu
2012-03-27
知道答主
回答量:16
采纳率:0%
帮助的人:13.7万
展开全部
public class ConcurrentLinkedQueue<E>
extends AbstractQueue<E>
implements Queue<E>, Serializable

一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。此队列不允许使用 null 元素。

此实现采用了有效的“无等待 (wait-free)”算法,该算法基于 Maged M. Michael 和 Michael L. Scott 合著的 Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms 中描述的算法。

需要小心的是,与大多数 collection 不同,size 方法不是 一个固定时间操作。由于这些队列的异步特性,确定当前元素的数量需要遍历这些元素。

此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选 方法。

内存一致性效果:当存在其他并发 collection 时,将对象放入 ConcurrentLinkedQueue 之前的线程中的操作 happen-before 随后通过另一线程从 ConcurrentLinkedQueue 访问或移除该元素的操作。

注意:ConcurrentLinkedQueue的size()是要遍历一遍集合的!因此,若不能满足你,可以基于 LinkedList(先进先出),自己加上同步,要性能控制住,需要尽可能小力度加同步 。
悉靓0f
2012-03-21 · 超过15用户采纳过TA的回答
知道答主
回答量:140
采纳率:0%
帮助的人:55.1万
展开全部
List 或ArrayLIst
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-06-25
展开全部
LinkedBlockingDeque
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
767566287
2012-03-26 · 超过32用户采纳过TA的回答
知道答主
回答量:294
采纳率:100%
帮助的人:94.3万
展开全部
vector
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
55字星
2012-03-20 · TA获得超过113个赞
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:96.3万
展开全部
队列
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 4条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式