3

基本上,我有大量对象的一些数据结构,这个结构将被多个线程访问,并且需要考虑到这一点。

需要不断地执行大量迭代和对象操作(每次主循环迭代都可能导致数据结构中的每个对象在最坏的情况下都被修改,在最佳/正常情况下没有任何修改)。

目前,我使用 aCopyOnWriteArrayList作为我的结构。此外,在每次迭代中,我确保不添加重复项,以尽量减少列表的大小。

使用锁/同步并不理想,因为我想避免阻止这些操作的线程。

据我所知,我的选择如下:

  1. contains()对要添加的每个元素运行检查
  2. 从列表中创建一个HashSet并将其转换回来(基本上删除所有重复项)
  3. 使用 aConcurrentHashMap而不是列表作为数据结构
  4. 还有什么?

我知道ArrayLists使用迭代要好得多,而严格使用HashMap. 由于我的情况需要两者,我想知道这里最好的解决方案是什么。

我还应该提到元素的顺序不是问题。

编辑:为了进一步澄清这一点,该集合将不断添加、删除和修改元素。在何种程度上取决于每个特定的运行时间(基于一般随机事件),所以我对做出任何关于它发生频率的假设持谨慎态度。唯一可以保证发生的事情是每次都会完全迭代集合,对每个元素执行多次检查。

4

1 回答 1

1

这个答案解决了您的并发问题:

需要不断地执行大量迭代和对象操作(每次主循环迭代都可能导致数据结构中的每个对象在最坏的情况下都被修改,在最佳/正常情况下没有任何修改)。

集合会被修改吗?如果不只是选择最有意义的集合并在对象上同步。一旦它们在集合中,您就不会从CopyOnWriteArraylistor获得同步好处ConcurrentHashMap

如果收藏品将被修改,后续是多久?

如果很多不要使用 CopyOnWriteArrayList。如果有一点,则根据最高搜索性能进行选择。

于 2014-11-21T22:04:12.207 回答