多线程
聊一下ConcurrentHashMap
ConcurrentHashMap是一种线程安全的高效Map集合. ❒ 底层数据结构 ▣ JDK1.7 底层采用分段的数组+链表实现 (一旦创建不能扩容,同时操作一个segment效率低下) ▣ JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树 ✔ 在JDK1.8 中,放弃了Segment设计,数据结构跟HashMap的数据结构是一样的: 数组 + 红黑树 + 链表 ✔ 采用 CAS + Synchronized来保证并发安全进行实现 ✔ CAS 控制数组节点的添加 ✔ synchronized只锁定当前链表或红黑二叉树的首节点,只要hash不冲突,就不会产生并发的问题,效率得到提升
❒ 底层数据结构 ✔ JDK1.7 底层采用分段的数组+链表实现。 ✔ JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。 ❒ 加锁的方式 ✔ JDK 1.7 采用Segment分段锁,底层使用的是ReentrantLock。 ✔ JDK 1.8 采用CAS添加新节点,采用synchronized锁定链表或红黑二叉树的首节点,相对Segment分段锁粒度更细,性能更好。