文档注释
太长了,只截取了一点面试会用到的。
说明:ConcurrentHashMap支持检索和更新的高并发,包含与HashTable对应的方法。虽然线程安全,检索时不需要锁定,并且不支持锁定整个表。
说明:迭代器一次只能被一个线程使用
说明:key和value都不能为空。
代码学习
说明:继承自AbstractMap(和HashMap的父类相同),实现ConcurrentMap接口。
说明:往空bin中插入第一个节点时,用CAS,其他更新操作(insert、delete、replace)加锁,以bin中的第一个节点本身作为锁。
说明:put流程:① key或value为空抛出异常 ② 对key的hashcode的扰动 ③—分情况【① 不存在表则以CAS初始化表 ②存在表,要插入位置为空,以CAS插入 ③ 有线程在扩容,去帮忙扩容 ④ 锁定头结点,若为链表节点,循环链表,找到相同节点则覆盖value,没找到则增加新节点;若为树节点,加入红黑树。最后判断是否需要树化】④put成功,为表中元素个数+1。