ConcurrentHashMap原理

ConcurrentHashMap 是专门为并发场景设计的,支持高效的并发读写操作

原理:

通过分段锁(Segment Locking)或 CAS(Compare-And-Swap)等机制来保证线程安全,而不需要像 Hashtable 那样对整个表加锁。

分段锁机制(JDK 1.7 及之前):


在 JDK 1.7 中,ConcurrentHashMap 使用了一种称为“分段锁”(Segmented Locking)的技术。
整个哈希表被分成多个段(Segment),每个段相当于一个小的哈希表,独立加锁。
不同线程可以同时访问不同的段,从而提高了并发性能。

CAS + synchronized(JDK 1.8 及之后):


在 JDK 1.8 中,ConcurrentHashMap 改进了实现方式,摒弃了分段锁,转而使用更细粒度的锁和 CAS 操作。
它采用类似 HashMap 的链表+红黑树结构,并在需要时对单个桶(Bucket)加锁(使用 synchronized 关键字)。
这种设计进一步提高了并发性能,尤其是在读多写少的场景下。

CAS:


CAS 操作接受三个参数:内存位置(V)、预期旧值(A)和新值(B)。
它会检查内存位置 V 中的值是否等于预期旧值 A。
如果相等,则将内存位置 V 更新为新值 B,并返回成功;如果不相等,则不进行任何操作,并返回失败。
这个过程是原子性的,意味着它要么完全执行,要么完全不执行,不会出现中间状态。
java.util.concurrent.atomic 包下的类(如 AtomicInteger, AtomicLong, AtomicReference 等)就利用了 CAS 来实现原子操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值