多线程中乐观锁的实现方式

目录

1.什么是乐观锁

1.概念:

2.优缺点:

3.实现方式

2.CAS算法

1.概念

2.优缺点

3.版本号机制

1.概念:


1.什么是乐观锁

1.概念:

        若共享资源被多个线程访问不会出现问题,则对其使用乐观锁,只有在共享资源被更新要提交的时候检查是否已经被其它线程更新

2.优缺点:

优点:

        适用于写操作比较少的情况,能够提供较高的执行效率,不会产生死锁问题和线程阻塞问题

缺点:

        若多次出现失败重试的情况,会大大影响性能;

        只针对单个共享变量

3.实现方式

        两种方式:CAS算法;版本号机制

2.CAS算法

1.概念

        CAS:Compare And Swap,译为比较和交换

        比较:比较的是 将要更新的变量值variable 期望值expected

        交换:交换的是 将要更新的变量值variable 写入的新的变量值new
        触发机制:只有当:variable = expected时,将new写入variable

2.优缺点

优点:

        CAS是原子性的,可以保证操作过程中的一致性

缺点:

        1.ABA问题:当线程第一次读到variable时,记录了variable的值(假设为A),要更新的时候又读了一次variable的值(假设为A),此时二者相等,开始更新数据,但这不能保证该variable在这过程中未被更新过(假设更新为B,但又更新回了A)。

        2.更新失败导致资源消耗过多:CAS更新失败后,会采用自旋锁进行重复更新;若一直失败就一直更新直到更新成功,这期间会消耗更多的系统资源

3.版本号机制

1.概念:

        为共享数据加了一个属性:版本号version,若共享数据被线程更新,则version+1;线程调用共享数据时,也会得到version的值,当线程需要进行更新操作时,会比较第一次得到的version值和最终提交时得到的version值是否一致,一致才会更新数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值