currenthashmap底层的CAS原理

介绍CAS

CAS的全称是Compare And Swap 即比较交换,其算法核心思想如下

执行函数:CAS(V,E,N) 其包含3个参数
V表示要更新的变量
E表示预期值
N表示新值

如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。

通俗的理解就是CAS操作需要我们提供一个期望值,当期望值与当前线程的变量值相同时,说明还没线程修改该值,当前线程可以进行修改,也就是执行CAS操作,但如果期望值与当前线程不符,则说明该值已被其他线程修改,此时不执行更新操作,但可以选择重新读取该变量再尝试再次修改该变量,也可以放弃操作。

由于CAS操作属于乐观派,它总认为自己可以成功完成操作,当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作,这点从图中也可以看出来。基于这样的原理,CAS操作即使没有锁,同样知道其他线程对共享资源操作影响,并执行相应的处理措施。同时从这点也可以看出,由于无锁操作中没有锁的存在,因此不可能出现死锁的情况,也就是说无锁操作天生免疫死锁。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ConcurrentHashMap的工作原理可以分为以下几个方面: 1. 分段锁设计:ConcurrentHashMap内部将数据分成了多个小的段(Segment),每个段都对应一把锁,而不是对整个哈希表进行加锁。不同的线程可以同时访问不同的段,从而实现了并发访问。这种设计使得并发访问的效率得到了极大的提升。 2. 安全发布:ConcurrentHashMap借助于volatile变量和final变量的特性,确保了其内部数据结构的安全发布。这样就可以避免在多线程环境下由于指令重排序等问题导致的数据不一致问题。 3. CAS操作:ConcurrentHashMap使用了CAS(Compare And Swap)操作来保证对数据的并发修改的正确性。当多个线程同时修改同一个数据时,只有一个线程能够成功地将修改操作写入内存,而其他线程则需要重新尝试。 4. 链表和红黑树:ConcurrentHashMap内部使用链表和红黑树来存储数据,当链表中的节点数量超过一定阈值时,会将链表转化为红黑树,以提高查找效率。同时,在并发的情况下,ConcurrentHashMap会使用锁分离技术,只对需要修改的数据进行加锁,而对于只读数据则无需加锁,从而提高了并发读取的效率。 总之,ConcurrentHashMap的工作原理主要是通过分段锁、CAS操作、链表和红黑树等技术手段来保证线程安全和高效性。这种设计使得ConcurrentHashMap在高并发、高吞吐量的场景下表现出色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值