首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并发LinkedList与ConcurrentLinkedQueue

并发LinkedList与ConcurrentLinkedQueue
EN

Stack Overflow用户
提问于 2016-07-13 16:03:50
回答 2查看 22K关注 0票数 2

我需要一个并发列表,它是线程安全的,同时也是迭代的最佳选择,并且应该返回精确的大小。我想储存一件物品的拍卖标书。所以我想

  1. 检索某一项目的确切投标数
  2. 将出价添加到项目中
  3. 检索给定项目的所有出价。
  4. 取消对某一项目的投标

我计划把它放在一个ConcurrentHashMap<Item, LinkedList<ItemBid>>中-- LinkedList不是线程安全的,而是返回精确大小的ConcurrentHashMap<Item, ConcurrentLinkedQueue<ItemBid>> --并发链接队列是线程安全的,但不能保证返回确切的大小。

是否有其他更好的集合将解决上述4点和线程安全。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-13 16:10:01

可以说,在线程安全的集合或映射中,您不能保证大小的“一致性”,这意味着读和写操作之间的“先发生”关系不会对您想要的用例有益,在这种情况下,对大小的读取操作应该返回一个值,反映上次写入操作的确切状态(N.B.:基于注释改进--见下文)。

如果性能不是问题,那么您可以使用以下成语--或者:

  • Collections.synchronizedMap(new HashMap<YourKeyType, YourValueType>());
  • Collections.synchronizedList(new ArrayList<YourType>());

然后,您还需要显式地对这些对象进行同步。

这将确保以阻塞为代价的操作顺序是一致的,并且您应该在任何时候都得到最后一个“正确”的大小。

票数 8
EN

Stack Overflow用户

发布于 2016-07-13 18:57:14

您可以使用LinkedBlockingQueue。它是阻塞的(与CLQ相对应),但大小保持不变,而不是像CLQ那样扫描。

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

https://stackoverflow.com/questions/38356636

复制
相关文章

相似问题

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