学习ConcurrentHashMap心得

一、什么是ConcurrentHashMap


ConcurrentHashMap和HashMap一样,是一个存放键值对的容器。使用hash算法来获取值的地址,因此时间复杂度是O(1)。查询非常快。
与HashMap不同的是,ConcurrentHashMap是线程安全的HashMap。专门用于多线程环境。
 

二、ConcurrentHashMap作用

ConcurrentHashMap是线程安全的,ConcurrentHashMap并非锁住整个方法,而是通过原子操作和局部加锁的方法保证了多线程的线程安全,且尽可能减少了性能损耗。

ConcurrentHashMap是Java中的一个线程安全的哈希表,它支持高并发的读写操作。它的实现方式是将整个哈希表分成多个小的哈希表,每个小的哈希表都有自己的锁,这样不同的线程可以同时访问不同的小哈希表,从而提高了并发性能。同时,ConcurrentHashMap还提供了一些高级的功能,比如分段锁、扩容等,可以更好地适应不同的并发场景。在多线程环境下,使用ConcurrentHashMap可以避免线程安全问题,提高程序的性能和可靠性。

三、ConcurrentHashMap原理

put()方法

使用了乐观锁机制
做插入操作时,首先进入乐观锁,
然后,在乐观锁中判断容器是否初始化,
如果没初始化则初始化容器,
如果已经初始化,则判断该hash位置的节点是否为空,如果为空,则通过CAS操作进行插入。
如果该节点不为空,再判断容器是否在扩容中,如果在扩容,则帮助其扩容。
如果没有扩容,则进行最后一步,先加锁,然后找到hash值相同的那个节点(hash冲突),
循环判断这个节点上的链表,决定做覆盖操作还是插入操作。
循环结束,插入完毕。
 

get()方法

没有使用锁,因为变量被volatile修饰。

四、使用场景

它与普通的HashMap相比,在多线程环境下可以提供更好的性能和并发访问的能力。适合并发访问,缓存管理,数据聚合,读多写少的场景。

虽然ConcurrentHashMap提供了线程安全的访问机制,但并不能保证单个操作的原子性。如果需要在一个操作中保证多个键值对的原子性操作,可以考虑使用其他的同步机制,如锁或原子类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值