gpt4 book ai didi

java - 并发 LinkedList 与 ConcurrentLinkedQueue

转载 作者:行者123 更新时间:2023-12-01 07:20:47 27 4
gpt4 key购买 nike

我需要一个线程安全的并发列表,同时最适合迭代并且应该返回精确的大小。我想存储某个元素的拍卖出价。所以我希望能够

  1. 检索某个项目的确切出价次数
  2. 为项目添加出价
  3. 检索给定商品的所有出价。
  4. 删除商品的出价

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

是否有其他更好的集合可以解决上述 4 点并且是线程安全的。

最佳答案

可以说,在线程安全的集合映射中,您无法保证大小的“一致性”,这意味着读取和写入操作之间的“发生之前”关系不会有利于您的期望用例,其中对大小的读取操作应返回一个反射(reflect)上次写入操作的确切状态的值(注意:根据注释进行改进 - 见下文)。

如果性能不是问题,您可以使用以下习惯用法 - 之一:

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

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

这将确保操作顺序保持一致,但会造成阻塞,并且您应该始终获得最后的“正确”大小。

关于java - 并发 LinkedList 与 ConcurrentLinkedQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com