从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。
在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。
推荐 Spring Boot/Cloud /Redis视频:

ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。
从ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。
在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中:

本文探讨了ConcurrentHashMap如何在JDK1.5中通过引入"分段锁"实现线程安全,避免了HashMap在多线程环境下的问题。详细解释了其内部结构,将Map拆分为多个Segment,并举例说明了并发put操作时的锁机制,展示了其在保证安全的同时提高效率的设计思想。
最低0.47元/天 解锁文章
2803

被折叠的 条评论
为什么被折叠?



