ConcurrentHashMap以及HashMap,HashTable的区别

ConcurrentHashMap与HashMap,和HashTable 的区别?

ConcurrentHashMap是一个线程安全的key-value数据结构,而HashMap不是。
ConcurrentHashMap的数据结构是 数组 + 数组 + 单向链表。HashMap的数据结构是 数组 + 单向列表

HashTable也是线程安全,HashTable与HashMap的存储结构相同,HashTable不允许null为key值,而HashMap允许
ConcurrentHashMap是HashTable的升级版,线程均安全,但是拥有不同的数据结构,和不同的性能。
Map使用Collections.synchronizedMap 允许需要同步的用户可以拥有同步,提供的有条件的线程安全性。

ConcurrentHashMap在1.7的实现是 初始化时默认初始化16个seqment,每个seqment中都会有一个与hashmap相同的HashEntry结构,采用数组 + 单向链表的方式组织KV数据的存储。在进行PUT时,会在hash到的seqment中加锁,锁的粒度为seqment而不是整个map。

--为啥要这么设计?减少热点,以提高并发能力。这就是与HashTable的区别。

而在1.8中,ConcurrentHashMap采用数组+单向链表+红黑树结合的方式来组织数据以提高读写性能.

ConcurrentHashMap中不再存在seqment,而是直接用Entry[]数据,减小加锁的粒度,提升写的性能。
ConcurrentHashMap中当单向链表中元素的个数超过8时,改用红黑树的存储结构以提高查询的速度。

 

posted @ 2017-05-11 23:33  周蝌蚪  阅读(261)  评论(0编辑  收藏  举报