我需要一个并发列表,它是线程安全的,同时也是迭代的最佳选择,并且应该返回精确的大小。我想储存一件物品的拍卖标书。所以我想
我计划把它放在一个ConcurrentHashMap<Item, LinkedList<ItemBid>>中-- LinkedList不是线程安全的,而是返回精确大小的ConcurrentHashMap<Item, ConcurrentLinkedQueue<ItemBid>> --并发链接队列是线程安全的,但不能保证返回确切的大小。
是否有其他更好的集合将解决上述4点和线程安全。
发布于 2016-07-13 16:10:01
可以说,在线程安全的集合或映射中,您不能保证大小的“一致性”,这意味着读和写操作之间的“先发生”关系不会对您想要的用例有益,在这种情况下,对大小的读取操作应该返回一个值,反映上次写入操作的确切状态(N.B.:基于注释改进--见下文)。
如果性能不是问题,那么您可以使用以下成语--或者:
Collections.synchronizedMap(new HashMap<YourKeyType, YourValueType>());Collections.synchronizedList(new ArrayList<YourType>());然后,您还需要显式地对这些对象进行同步。
这将确保以阻塞为代价的操作顺序是一致的,并且您应该在任何时候都得到最后一个“正确”的大小。
发布于 2016-07-13 18:57:14
您可以使用LinkedBlockingQueue。它是阻塞的(与CLQ相对应),但大小保持不变,而不是像CLQ那样扫描。
https://stackoverflow.com/questions/38356636
复制相似问题