当前位置: 首页 > 知识库问答 >
问题:

我需要简单的解释“锁条带化”是如何与ConcurrentHashMap一起工作的

苏磊
2023-03-14

根据实践中的Java并发,11.4.3章说:

锁拆分有时可以扩展到对一组可变的独立对象进行分区锁定,在这种情况下称为锁条带化。例如,ConcurrentHashMap的实现使用了一个由16个锁组成的数组,每个锁守护1/16的散列桶;铲斗N由锁N mod 16保护。

共有1个答案

李勇
2023-03-14

哈希映射构建在数组上,其中哈希函数将对象映射到底层数组中的元素。假设底层数组有1024个元素--ConcurrentHashMap实际上将其转换为由64个元素组成的16个不同的子数组,例如{0,63}、{64,127}等。每个子数组都有自己的锁,因此修改{0,63}子数组不会影响{64,127}子数组--一个线程可以写入第一个子数组,而另一个线程则写入第二个子数组。

 类似资料:
  • 问题内容: 根据Java Concurrency in Practice,第11.4.3章说: 锁拆分有时可以扩展为对一组可变对象的独立对象进行分区锁,在这种情况下,这称为锁拆分。例如,ConcurrentHashMap的实现使用了一个由16个锁组成的数组,每个锁保护着1/16的哈希桶。桶N由锁N mod 16保护。 我仍然无法理解和可视化锁条和桶机制。有人可以用很好的理解力来解释这个问题吗:)

  • 问题内容: 我通过“ SHOW INNODB STATUS”收到了以下死锁日志。有人可以解释一下为什么交易被中止吗?似乎事务2持有该锁,但也卡住以请求相同的锁(“等待”部分除外),当事务1也需要它时,这将导致死锁。 问题答案: 第一步是确定两个查询是什么: SELECT API_KEY,完成,创建,删除,标记,,GROUP_ID,主机名,,JID,标签,语言,优先,,重新启动,状态,类型,UID,

  • 我正在尝试获得一个LocalStack/LocalStack的本地docker实例来使用Node.js aws-sdk库。但我可以得到一个简单的createTopic工作在一个sns客户端。 我已经用这个命令启动了docker映像 docker Run-d-p 4567-4583:4567-4583 LocalStack/LocalStack 我正在运行的代码.... 返回的错误.... [AWS

  • 问题内容: 我真的是使用Android的新手,所以让我感到困惑。我看了看似100篇教程以及有关如何从Android上的Web服务获取信息的示例,但是我需要的是对一个毫无头绪的人所需要的东西。以下是我没有得到的特别几点: 我不知道该如何处理XML文件。.意思是,一旦我完成Java工作,就是所有要做的事情吗?还是需要在XML文件中进行任何更改? 似乎我应该为其中一些教程创建一个新类,但是我不确定,如果

  • 我正在试用Rubymine(当前版本- 6.0.3)。我的客户机是Windows,我正在连接到一个远程linux主机,我的Ruby堆栈正在那里运行。我正在做一个存储在git repo中的项目,所以我已经在Windows客户端和项目运行的linux机器上克隆了这个repo。 < li >必须在本地签出文件似乎是一个缺点 感谢您提供的任何Rubymine提示。

  • 我正在读一本关于PHP开发的书,但我遇到了让Apache与PHP一起工作的麻烦。所以我已经尝试了一段时间,第一次我认为是因为我有一个64位版本的PHP和32位版本的Apache,所以我重新下载了所有的东西,以确保我有所有的32位版本。 书名:PHP和MySQL Web开发开发者库第四版 我下载了PHP5.5(5.5.24)x86线程安全。到目前为止,我已经按照指示做了 设置一个php.ini文件,