ConcurrentHashMap和Hashtable的区别?
发表于|更新于|整理归纳
|总字数:319|阅读时长:1分钟|浏览量:
ConcurrentHashMap 和 Hashtable 的区别?
ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的⽅式上不同。
底层数据结构:
- ConcurrentHashMap
- JDK 1.7:ConcurrentHashMap 底层采⽤
分段的数组+链表
实现 - JDK1.8 : ConcurrentHashMap 底层采⽤采⽤的数据结构跟 HashMap1.8 的结构⼀样,
数组+链表/红⿊⼆叉树
。
- JDK 1.7:ConcurrentHashMap 底层采⽤
- Hashtable: Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采⽤
数组+链表
的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突⽽存在的
- ConcurrentHashMap
实现线程安全的方式:
- ConcurrentHashMap:
- JDK 1.7: ConcurrentHashMap 对整个桶数组进⾏了分割分段( Segment ,分段锁),每⼀把锁只锁容器其中⼀部分数据,多线程访问容器⾥不同数据段的数据,就不会存在锁竞争,提⾼并发访问率。
- JDK 1.8: Node 数组+链表+红⿊树的数据结构来实现,并发控制使⽤ synchronized 和 CAS 来操作。
- HashTable (同⼀把锁) : 使⽤ synchronized 来保证线程安全,效率⾮常低下。当⼀个线程访问同步⽅法时,其他线程也访问同步⽅法,可能会进⼊阻塞或轮询状态,如使⽤ put 添加元素,另⼀个线程不能使⽤ put 添加元素,也不能使⽤ get,竞争会越来越激烈效率越低。
数据结构:
- ConcurrentHashMap:
文章作者: MUMU
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 blog.wo0ow.com!