【Java并发编程】3.CAS、Lock、读写锁

本文探讨了Java并发编程中的CAS操作、显示锁Lock以及读写锁的概念与应用。CAS通过非阻塞方式实现原子性操作,但存在ABA问题和开销问题。LongAdder作为并发计数器,通过降低竞争提高效率。Lock提供更细粒度的控制,如ReentrantLock支持公平与非公平模式。读写锁允许多个读取者同时访问,提高并发性能。文章还讨论了锁的降级与升级以及读写锁与synchronized的性能对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

CAS

什么是原子(atomic)操作:

多线程中的原子操作类似于数据库中的同时执行AB两个语句,要么同时执行成功,要么同时执行失败。

synchronized 的不足:

  1. syn是基于阻塞的锁机制,颗粒度还是比较大 的。
  2. 如果被阻塞的线程优先级很高怎么办。
  3. 拿到锁的线程一直不释放锁怎么办。
  4. 如果出现大量竞争会消耗CPU,同时带来死锁或其他安全隐患。

用syn也可以实现原子操作不过不太合适,目前CPU指令级别实现了原子性的比较和交换(Conmpare And Swap)操作(CAS不是锁只是CPU提供的一个原子性操作指令哦切记)。

CAS的实现步骤如下

  1. 获得L(内存地址)上的数据初始值D1
  2. 对D1的数据进行增减后最终等到D2<
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoWhat1412

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值