美文网首页Android知识程序员
ConcurrentHashMap实现原理

ConcurrentHashMap实现原理

作者: 哼哈二将0 | 来源:发表于2017-11-07 09:50 被阅读0次

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

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

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

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

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

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


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

    相关文章

      网友评论

        本文标题:ConcurrentHashMap实现原理

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