当您需要一个可以被多个线程访问的排序容器时,ConcurrentSkipListSet和ConcurrentSkipListMap很有用。这些本质上是并发代码的TreeMap和TreeSet的等效项。
JDK
6的实现基于 IBM Maged
Michael的高性能动态无锁哈希表和基于列表的集,这表明您可以使用比较和交换(CAS) *** 作原子地对跳过列表执行很多 *** 作。这些是无锁的,因此您不必担心
synchronized使用这些类时(对于大多数 *** 作)的开销。
Java 目前没有基于Red-Black树的并发Map /
Set实现。我通过文献查了一下,发现一对夫妇 的论文即表明并发RB树跑赢跳跃列表,但很多这些测试都是用做事务性的存储器,这是不是在硬件支持目前任何主要的架构。
我假设JDK的人员在此处使用了跳过列表,因为该实现是众所周知的,并且使其无锁是简单且可移植的(使用CAS)。如果有人想澄清一下,请这样做。我很好奇。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)