ConcurrentHashMap的内部工作?

时间:2014-03-30 11:37:30

标签: java map concurrenthashmap

我正在查看ConcurrentHashMap的源代码,了解如何处理并发更新。但看起来像 它要复杂才能理解。然后我想如果我需要实现它我的自我应该怎么做呢。我上来了 用简单的算法。我的问题是我的正确道路上的算法(我认为是)和 如果我将它与jre 6规定的实施相比较,它缺乏高水平?

基本上我们必须在单个存储桶级别(而不是整个HashMap)进行锁定,以便并发更新需要 仅锁定到达相同存储桶的条目。现在,基于密钥的哈希码确定存储桶。类似地,如果我们得到的话 基于哈希码的锁定,问题将得到解决。因此,具有不同哈希码的两个密钥将转到单独的桶 因此我们可以对interned hashcode值使用同步块(使用interned值的目的是在同一个桶下的同一个对象上获取锁)。在这种情况下,同步将在不同的实习中发生 哈希码字符串。因此,并发哈希码可能会发生。

因此,具有相同哈希码的两个密钥将转到相同的桶。因此,我们可以在内部哈希码值上使用同步块 避免并发更新

这是我提出的put方法

     public V put(K key, V value) {

     int hashCode = geKeyHashcode();
     String stringHashcode = hashCode + "";

     synchronized (str.intern()) { // line A

     // proceed for put operation
     }

     }

现在在A行,我们可以停止位于相同存储桶/网段下的并发更新,但请继续处于单独的存储桶/网段下

我确信它可以得到很多改进,但主要的是它也可以实现简单的算法。不是吗?

更新: - 如果有人可以更容易地转发/指向解释java 6规定的ConcurrentHashMap的资源,那就太棒了(我尝试使用谷歌搜索,但无法找到解释如何放置方法实现就像使用不安全等)

0 个答案:

没有答案