ConcurrentHashMap的内部工作?

我正在查看ConcurrentHashMap的源代码如何处理并发更新。 但看起来像它复杂的理解。 然后,我想如果我需要实施它,我自己该如何去做。 我想出了简单的算法。 我的问题是我的算法在正确的道路上(我认为是),如果我将它与缺少高级别的jre 6规定的实现进行比较?

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

因此,具有相同散列码的两个密钥将转到同一个存储桶。因此,我们可以对interned hashcode值使用同步块并避免并发更新

这里是我提出的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的资源,这将是伟大的(我试过谷歌搜索,但无法找到解释如何使用不安全的等put方法实现)

链接地址: http://www.djcxy.com/p/91893.html

上一篇: Internal working of ConcurrentHashMap?

下一篇: How to work around the stricter Java 8 Javadoc when using Maven