JAVA乐观锁小结

说到Java锁机制,我们可以暂时将Java的锁分为乐观锁和悲观锁。它们是整个并发编程中很重要的基石,也是面试当中经常会被问到的知识点。今天我们就来总结一下乐观锁的那些事。

什么是乐观锁

既然说到了乐观锁,那么就需要先解释一个问题,即什么是乐观锁?

顾名思义,乐观锁就是一种理想化的状态,非常乐观。每次去取数据的时候都认为其他线程不会对该数据进行修改,因此不会考虑上锁(毕竟一般上锁都是为了主动从防止一些“坏人”,而我们的乐观锁天真的认为没什么坏人)。

基于乐观锁的思想有很多种实现方式,而谈到这里就不得不说一下今天的主角,就是CAS("Compare and Swap)

CAS技术

CAS是乐观锁的一种经典实现方式,当多个线程尝试更新一个变量的时候,只有一个线程能够更新成功,其它线程都会被告知更新失败,但是失败的线程并不会挂起而是会自旋等待并重试。再整个CAS实现当中,有几个参数需要给大家解释一下:V(内存的新值),A(期待值),B(要写入的值)。而CAS的工作过程即:先去读取一次内存当中的旧值作为期待值,再准备向数据B之前,再次取内存当中读取该值是否有被修改。如果被修改(A != V),则放弃被次操作并自旋重试。如果没有被修改,则写入该值。由于其简单的轻量级的实现方式,JUC当中也有大量的工具类选择基于CAS进行实现:Atomic相关类,ReentrantLock中的FairSync类等。

接下来我们通过源码的方式,具体看一下CAS在At

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值