JUC-并发容器
并发容器
没写好
1. 并发容器概览
2. 并发容器的演进
过时的并发容器
线程安全的ArrayList --- Vector 方法加了synchronized
线程安全的HashMap --- Hashtable 方法加了synchronized
它们都是性能差,它们都是加了synchronized
用Collections.synchronizedList(new ArrayList()) 包装ArrayList底层也是用这个同步代码块实现,也同样会让性能更差。
Collections.synchronizedMap 同理
3. ConcurrentHashMap -面试常考
#### Map简介
- Hashtable(同步,慢,数据量小)
- K-V对, K和V都不允许为null
- 无序的 – 适合小数据量 – 主要方法: clear, contains/containsValue, containsKey, get, put,remove, size
- HashMap(不支持同步,快,数据量大)
- Properties (同步,文件形式,数据量小)
为什么需要ConcurrentHashMap
HashMap 的cpu 100%的问题
九层之台,起于累土、罗马不是一天建成的:HashMap的分析
1.7的结构
JDK1.7的ConcurrentHashMap实现和分析
![](E:\笔记资料\JUC\jucimage\JDK1.7的ConcurrentHashMap实现和分析 2.png)
Java 7中的ConcurrentHashMap最外层是多个segment,每个segment的底层数据结构与HashMap类似,仍然是数组和链表组成的拉链法
JDK1.8的ConcurrentHashMap实现和源码
判断key value不为空
计算hash值 根据对应位置节点的类型,来赋值, 或者helpTransfer 或者增长链表 或者给红黑树增加节点 检查满足阈值就“红黑树化” 返回oldVal
计算hash值
找到对应的位置,根据情况进行︰ 直接取值 红黑树里找值 遍历链表取值 返回找到的结果