当前位置: 首页 > 面试题库 >

ConcurrentSkipListSet什么时候有用?

姜旭
2023-03-14
问题内容

我刚刚在Java 6
API上看到了这种数据结构,并且很好奇它何时会成为有用的资源。我正在为scjp考试学习,尽管我看到过模拟考试中提到它的内容,但Kathy
Sierra的书并未涵盖它。


问题答案:

当您需要一个可以被多个线程访问的排序容器时,ConcurrentSkipListSet和ConcurrentSkipListMap很有用。这些本质上是并发代码的TreeMap和TreeSet的等效项。

JDK
6的实现基于 IBM Maged
Michael的高性能动态无锁哈希表和基于列表的集,这表明您可以使用比较和交换(CAS)操作原子地对跳过列表执行很多操作。这些是无锁的,因此您不必担心synchronized使用这些类时(对于大多数操作)的开销。

Java 目前没有基于Red-Black树的并发Map /
Set实现。我通过文献查了一下,发现一对夫妇 的论文即表明并发RB树跑赢跳跃列表,但很多这些测试都是用做事务性的存储器,这是不是在硬件支持目前任何主要的架构

我假设JDK的人员在此处使用了跳过列表,因为该实现是众所周知的,并且使其无锁是简单且可移植的(使用CAS)。如果有人想澄清一下,请这样做。我很好奇。



 类似资料:
  • 本文向大家介绍什么时候用delegate,什么时候用Notification?相关面试题,主要包含被问及什么时候用delegate,什么时候用Notification?时的应答技巧和注意事项,需要的朋友参考一下 答:delegate针对one-to-one关系,并且reciever可以返回值 给sender,notification 可以针对one-to-one/many/none,recieve

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 一般来说,当发现 CPU 的占用率和实际业务应该出现的占用率不相符,或者对 Nginx worker 的资源使用率(CPU,内存,磁盘 IO )出现怀疑的情况下,都可以使用火焰图进行抓取。另外,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下。 常用的火焰图有三种: lj-lua-stacks.sxx 用于绘制 Lua 代码的火焰图 sam

  • 问题内容: 我真的想不出python为什么需要关键字的任何原因(大多数语言似乎没有类似的关键字)。例如,可以删除变量而不是删除变量。从字典中删除时,可以添加一个方法。 是否有任何理由保留在python中,或者它是Python的垃圾收集日的痕迹? 问题答案: 首先,除了局部变量,你还可以进行其他操作 两者都应该明显有用。其次,del对局部变量使用可使意图更清晰。比较: 至 我知道在这种情况下,目的是