put 过程分析我们先看 put 的主流程,对于其中的一些关键细节操作,后面会进行详细介绍。第一层皮很简单,根据 hash 值很快就能找到相应的 Segment,之后就是 Segment 内部的 put 操作了。不过 Doug Lea 也说了,根据统计,如果使用默认的阈值,大约只有 1/6 的节点需要克隆。get 过程分析相对于 put 来说,get 真的不要太简单。remove 操作的线程安全性remove 操作我们没有分析源码,所以这里说的读者感兴趣的话还是需要到源码中去求实一下的。get 操作需要遍历链表,但是 remove 操作会"破坏"链表。如果 remove 先破坏了一个节点,分两种情况考虑。

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析

Java7和Java8中的ConcurrentHashMap原理解析