ConcurrentHashMap和HashTable

2018-01-29  本文已影响0人  lwz9103

一、HashTable(线程安全)

读方法写写方法都加锁,锁数量太少,竞争激烈


image.png image.png image.png

二、ConcurrentHashMap(线程安全)

对hash值,进行分段加锁,hash值处在同一个segment的进行加锁。

1. 多线程HashMap出现死循环的问题

扩容时,同时调用reHash方法,导致形成环形列表,且有些元素位置错乱。下次获取元素时,可能会在循环列表中获取,但是元素错乱后,无法找到,导致死循环。

2.ConcurrentHashMap分段加锁原理

2.1spread进行分组


image.png

2.2 put操作时
如果hash位置没有元素,采用cas写入元素


image.png
如果hash位置已有元素,且对象相等,则更新
如果hash碰撞,则synchronied加锁操作
上一篇下一篇

猜你喜欢

热点阅读