ConcurrentHashMap和Hashtable区别?

Posted wylwyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ConcurrentHashMap和Hashtable区别?相关的知识,希望对你有一定的参考价值。

1、底层数据结构:

JDK1.7的ConcurrentHashMap底层使用分段的数据+链表实现,JDK1.8采用的数据结构和HashMap1.8的结构一样。数据+链表/红黑二叉树。

Hashttable和JDK1.8之前的HashMap的底层数据结构类似都是采用数据+链表的形式,数组是HashMap的主体,链表是为了解决哈希冲突而存在的。

2、实现线程安全的方式(重要):

在JDK1.7的时候,ConcurrentHashMap(分段锁)对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中的一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。

在JDK1.8的时候,已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。

Hashtable(同一把锁),使用synchronsized来保证线程安全,效率低下。当一个线程访问同步方法时,其他线程也访问同步方法时,可能会进入阻塞或轮询状态,如使用put添加元素,另一个线程不能使用put添加元素,也不能get。

 

以上是关于ConcurrentHashMap和Hashtable区别?的主要内容,如果未能解决你的问题,请参考以下文章

ConcurrentHashMap1.7和ConcurrentHashMap1.8的异同

ConcurrentHashMap面试问题总结

ConcurrentHashMap1.7和ConcurrentHashMap1.8的异同

ConcurrentHashMap1.7和ConcurrentHashMap1.8的异同

ConcurrentHashMap1.7和ConcurrentHashMap1.8的异同

java ConcurrentHashMap 初识