1、整体结构
JDK1.8的ConcurrentHashMap的内部结构与JDK 1.7有很大区别,1.8可以理解为只是简单的数组+链表+红黑树的结构。【但是如何保证线程安全的呢,下面说】
2、主要变量
TreeBin:红黑树对象【包含红黑树节点属性TreeNode】
3、put过程 table[index]处第一个节点的存放线程安全通过CAS来控制;而table[index]处的链表或者红黑树通过synchronized(table[index]),也就是锁住table[index]出的第一个节点来保证线程安全。
3.1初始化table
3.2、链表转红黑树过程:
4、扩容
1.8的ConcurrentHashMap扩容比较复杂,它同时支持多个线程并发扩容,进行迁移的那个节点不允许put,通过synchronized table[index]节点进行控制,但是还未进行迁移的节点允许put【好绕好绕,需要大家仔细去研究了,小弟无能为力了,绕不出来了】
5、get过程
与1.7的基本啥差异