java 乐观锁的一种实现CAS(compare and swap)比较交换 和 AutomInteger类初了解

本文探讨了一种在Java应用中通过结合数据库查询实现的乐观锁策略,利用数据库的updatetime和主键确保并发安全,虽非底层锁,但能有效避免竞态条件,适用于更新频率不高的场景。

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

序:
关于并发编程控制是java中的一部分重点和难点部分,一般工作中写业务逻辑也很难用到,但当晋级和面试的时候确不可不免的被考量。换工作的时候发现新公司采用了一种巧妙的方式(无知所以巧妙)实现了乐观锁(有种坐井观天的感觉),决定给自己敲响警钟,不要放弃学习和进取的心。
正文:
业务更新与删除的时候采用java sevice类中结合数据库查询来保证并发操作的安全性,这种方式贯通了前后端,首先将数据查询到前端展示,无论是接下来更改还是删除,数据库表的updatetime和主键共同作为条件操作,一旦数据库中的相关数据被更改那么时间被更新后返回到页面提示数据被更新,刷新数据后重试。就完成了cas自旋的一种方式,也有叫数据库+版本号的方式,个人感觉还是比较巧妙的,不用锁但是起到了锁的效果,与autoInteger中的compareAndSet方法有异曲同工之妙,开销相对比较大,毕竟会有个请求然后经数据库查询最后进行比较的过程。使用范围也有限,说是乐观锁是因为,该方法默认数据不会被更改或者较低的概率被修改了,这样直接去进行修改,并未对方法或对象进行上锁,但遇到并发比较高的情况效率会相对比较低。悲观锁相反,指的是并发大概率会发生,所以直接对要操作的资源进行控制,当一个线程用过之后才会放开让其它线程使用。
在这里插入图片描述
这种方式除非上其它线程将dateTime时间戳不进行更新,或者出现跟过去的相同的一个时间戳,否则是不会出现AAB这种情况的,就是不太适应频繁修改删除操作的场合。其余都ok了,类似unsafe类中采用native方法实现的cas,不过这不是采用计算机底层实现的方式,反而个人觉得更优雅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值