除了众所周知的数据结构,它可用于多线程程序,如并发堆栈,并发队列,并发列表,并发哈希。 是否有其他较少知晓但有用的数据结构可用于并行/多线程编程。
即使它们是上面列出的数据结构的某些不同版本并进行了一些优化,也请分享。
请包含一些参考资料。
编辑:将继续列出我找到的内容
1)ConcurrentCuckooHashing(ConcurrentHashing的优化版本)
2)ConcurrentSkipList
答案 0 :(得分:4)
如果你不介意的话,我会尝试回答JDK的例子:
<强>解释强>
CopyOnWriteArrayList
是一个列表,通过每次修改列表时重新创建后备数组来实现线程安全使用; Collections.synchronizedList()
返回的列表是线程安全的,因为它们包含大多数操作的独占锁定(迭代是例外); ArrayBlockingQueue
。具有固定大小的队列,当没有任何东西可以拉出或没有空间可以推入时阻塞; ConcurrentLinkedQueue
是基于Michael-Scott算法的无锁队列; <强>集强>
Collections.newSetFromMap()
返回并带有支持ConcurrentHashMap
。使用这些集合,您可以确保其迭代器不容易ConcurrentModificationException
,并且它们使用条带化技术来锁定它 - 锁定所有集合不是执行某些操作所必需的。例如,当您要添加元素时,只会锁定由元素hashCode()
确定的集合部分; ConcurrentSkipListSet
。基于Skip List数据结构的线程安全集; Collections.synchronizedSet()
返回的集合。所有关于类似名单的论点都适用于此。地图强>
ConcurrentHashMap
。条带化基于项目键; ConcurrentSkipListMap
。线程安全映射,基于跳过列表; Collections.synchronizedMap()
返回。关于类似列表和地图的所有要点都适用于此。这些或多或少是用于多线程使用的标准数据结构,对于大多数实际任务来说应该足够了。我还发现了一些你可能会觉得有用的链接: