ConcurrentHashMap与HashTable都是线程安全的,但是其实现机制有所不同,效率也有所不
同,其主要区别如下: ConcurrentHashMap (JDK8 之
HashTable ConcurrentHashMap 前)
把所有的get、put方法加上锁把数据分段,每个分段分别加
实现同步 锁,实现同步,提高效率釆用CAS算法提高效率
CAS (Compare And Swap)算法,比较替换,用一个期望值与当前值比较,如果期望值与当前 值相同则用新值替换当前值。这个是并发场景中乐观锁常常使用的算法。
为什么HashMap不是线程安全的?
HashMap在扩容的时候,元素为重新排列(同一个桶里面的元素釆用的是头插入法,原来的链 表顺序会被倒置),并发场景可能会形成循环链表。
Was this helpful?
0 / 0