ConcurrentHashMap底层结构(JDK1.7)

本文详细介绍了ConcurrentHashMap在JDK1.7中的实现原理,包括其线程安全的分段锁策略,以及如何通过Segment和HashEntry数组实现高效并发访问。在查找和插入操作中,ConcurrentHashMap避免了全锁同步,提供了更高的并发性能。
摘要由CSDN通过智能技术生成

HashMap不是线程安全的,HashTable虽然是线程安全,但是该类所有的方法都用synchronized进行线程安全的控制,在高并发的情况下,同一时刻只有一个线程可以获取对象监视器,其他线程阻塞或者轮询等待,在线程竞争激烈的情况下,这种方式的效率会非常的低下。

 

HashTable在扩容的时候,newSize = 2 * oldSize + 1;

 

ConcurrentHashMap是线程安全的,使用了锁分段的思想提高了并发度。

ConcurrentHashMap为什么高效:

Hashtable低效主要是因为所有访问Hashtable的线程都争夺一把锁。如果容器有很多把锁,每一把锁控制容器中的一部分数据,那么当多个线程访问容器里的不同部分的数据时,线程之前就不会存在锁的竞争,这样就可以有效的提高并发的访问效率。这也正是ConcurrentHashMap使用的分段锁技术。将ConcurrentHashMap容器的数据分段存储,每一段数据分配一个Segment(锁),当线程占用其中一个Segment时,其他线程可正常访问其他段数据。

 

jdk1.7下ConcurrentHashMap的数据结构:

image

ConcurrentHashMap包含一个Segment数组,每个Segment包含一个HashEntry数组,当修改HashEntry数组采用开链法处理冲突,所以它的每个HashEntry元素又是链表结构的元素。

查找元素时,先通过key定位到Segment

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值