注:jdk8之后,不再使用分段锁方式
详见:https://blog.csdn.net/programerxiaoer/article/details/80040090
与
Java8 中 ConcurrentHashMap工作原理的要点分析:
https://www.cnblogs.com/nullzx/p/8647220.html
转自:https://blog.csdn.net/xuefeng0707/article/details/40834595
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。
在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。
ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。
从ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。
在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中:
ta