美文网首页
ConcurrentHashMap & Hashtable

ConcurrentHashMap & Hashtable

作者: 于占伍 | 来源:发表于2020-04-24 09:43 被阅读0次

1, HashTable

跟HashMap相比Hashtable是线程安全的,适合在多线程的情况下使用,但是效率可不太乐观。

hashmap1.jpg

Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null 因为Hashtable使用的是安全失败机制(fail-safe),这种机制会使你此次读到的数据不一定是最新的数据。 如果你使用null值,就会使得其无法判断对应的key是不存在还是为空,因为你无法再调用一次contain(key)来对key是否存在进行判断,ConcurrentHashMap同理。

2, ConcurrentHashMap

结构

current1.jpg current2.jpg

分段锁,每当一个线程占用锁访问一个 Segment 时,不会影响到其他的 Segment

1.8的优化

抛弃了原有的Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性。 1.8 在 1.7 的数据结构上做了大的改动,采用红黑树之后可以保证查询效率(O(logn)),甚至取消了 ReentrantLock 改为了 synchronized,这样可以看出在新版的 JDK 中对 synchronized 优化是很到位的

相关文章

网友评论

      本文标题:ConcurrentHashMap & Hashtable

      本文链接:https://www.haomeiwen.com/subject/qudxwhtx.html