每天一个知识点(12)-Java集合框架之ConcurrentHashMap

HashMap是非线程安全的,因此java的集合框架中提供了线程安全的map,就是ConcurrentHashMap;ConcurrentHashMap由一个个的Segment组成,也称为分段锁。而ConcurrentHashMap之所以是线程安全的,是因为Segment继承了ReentrantLock来进行加锁,所以每次加锁都会锁住一个Segment,这样就可以保证每一个Segment是线程安全的,进而也就实现了整体的线程安全。创建ConcurrentHashMap时,默认有16个Segment,因此理论上可以同时支持16个线程的并发写,前提是这些写操作发生在不同的Segment上。这个16我们称为并发度,可以在创建时指定,但是一旦指定就无法再进行改变。
下图是Java7中ConcurrentHashMap的数据结构示意图。



和HashMap类似,Java8中ConcurrentHashMap也引入了红黑树,保证了链表长度太长进行转换,降低查询复杂度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容