admin

HashMap、HashTable、ConcurrentHashMap 区别
HashMap线程不安全,可以存储key或value为null的键值对。HashTable直接采用synchron...
扫描右侧二维码阅读全文
06
2018/03

HashMap、HashTable、ConcurrentHashMap 区别

HashMap

线程不安全,可以存储keyvaluenull的键值对。

HashTable

直接采用synchronizedput方法加锁,线程安全,但多线程环境中效率非常低下,keyvalue都不可以为null

ConcurrentHashMap

keyvalue都不可以为null
jdk1.7 及以下:
实现采用 Segment 实现线程安全同步,Segment继承ReentrantLock实现加锁,默认为 16 个Segment,每个Segment包含一个HashEntry链表数组,即每次put操作,对Segment加锁,要锁住多个链表,效率较低。
jdk1.8以后:
数据结构与HashMap差不多,put操作直接用synchronizedNode链表头节点加锁,即每次只锁住一个链表。
还有一个优化就是当链表节点数大于等于 8 时,自动将链表结构转换为红黑树结构。

Last modification:March 6th, 2018 at 11:32 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment