美文网首页
ConcurrentHashMap源码解析

ConcurrentHashMap源码解析

作者: 可可西里的星星 | 来源:发表于2019-05-26 22:32 被阅读0次

ConcurrentHashMap源码解析

面试题:对象是key的时候,concurrentHashMap怎么put的?

关键点在于
(1)求hash值:

//ConcurrentHashMap.java
  static final int spread(int h) {
        return (h ^ (h >>> 16)) & HASH_BITS;
    }

(2)put过程关键点

      for (Node<K,V> e = f;; ++binCount) {
                                K ek;
                                if (e.hash == hash &&
                                    ((ek = e.key) == key ||
                                     (ek != null && key.equals(ek)))) {
                                    oldVal = e.val;
                                    if (!onlyIfAbsent)
                                        e.val = value;
                                    break;
                                }
                                Node<K,V> pred = e;
                                if ((e = e.next) == null) {
                                    pred.next = new Node<K,V>(hash, key,
                                                              value, null);
                                    break;
                                }
                            }

如果key的hash相等并且(key的地址相等或者key不为空且key的equals方法返回true),则说明两个key一致,需要覆盖原来concurrentHashMap的value。否则新建一个key、value放入table

如果有不明白的可以关注我加我微信哦~ 麻烦给个赞,谢谢

相关文章

网友评论

      本文标题:ConcurrentHashMap源码解析

      本文链接:https://www.haomeiwen.com/subject/nflqtctx.html