java 乐观锁 实例_JAVA乐观锁实现-CAS(示例代码)

本文介绍了Java中的CAS(Compare And Swap)机制,它是一种硬件层面的原子指令,用于实现乐观锁思想。通过举例展示了在多线程环境下,如何使用AtomicInteger解决并发计数问题,确保数据更新的原子性。同时,文章提到了CAS的两个主要缺点:ABA问题和潜在的循环时间开销。
摘要由CSDN通过智能技术生成

是什么

全称compare and swap,一个CPU原子指令,在硬件层面实现的机制,体现了乐观锁的思想。

JVM用C语言封装了汇编调用。Java的基础库中有很多类就是基于JNI调用C接口实现了多线程同步更新的功能。

原理

CMS有三个操作数:当前主内存变量的值V,线程本地变量预期值A,线程本地待更新值B。当需要更新变量值的时候,会先获取到内存变量值V然后很预期值A进行比较,如果相同则更新为B,如果不同,则将最新的变量值更新到预期值中再重新尝试上面的步骤,直到成功为止。

举例

以基于CAS实现的AtomicInteger 类进行讲解。

我们先写一个多线程,对同一个数据类进行分别进行加减操作10000次,正确的结果应该还是0。

没有任何多线程同步机制的代码如下:

packagepriv.nanjing.testCasClass;/** @Author : darrenqiao

**/

//多线程争用的数据类

classCounter {int count = 0;public intgetCount() {returncount;

}public void setCount(intcount) {this.count =count;

}public voidadd() {

count+= 1;

}public voiddec() {

count-= 1;

}

}//争用数据做加操作的线程

class AddDataThread extendsThread {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值