Android知识程序员

ConcurrentHashMap实现原理

2017-11-07  本文已影响0人  哼哈二将0

我们知道HashTable:synchronize是针对整张Hash表的,就是每次锁住整张表让线程独占。

ConcurrentHashMap 允许多个操作并发进行,在于使用了锁分离技术,使用多个锁来控制对hash表的不同部分进行修改,

内部使用段来表示这些不同的部分,每个段就是一个小的HashTable,他们有自己的锁。

只要多个修改发生在不同的段上,他们就可以并发进行。

ConcurrentHashMap把整张表分成很多段,每一段就是一个小的HashTable(线程安全) ,他们有自己的锁,操作在不同段上可以并发进行。

锁分离:简单理解成把一个大的HashTable分解成多个,形成了锁分离。Hashtable的实现方式是---锁整个hash表


有些方法需要跨段:比如size() containsValue() ,则需要锁整个表而不仅仅是某个段,需要按顺序锁定所有的段,操作完以后,又按顺序释放所有的段。按顺序很重要,否则有可能出现死锁。ConcurrentHashMap 内部段数组final的,其他成员变量也是final的,需要保证段数组成员也是final,可以确保不会死锁,获得锁的顺序是固定的。

上一篇下一篇

猜你喜欢

热点阅读