Java中的CAS(Compare And Swap)
来源:互联网 发布:淘宝追加评论不显示 编辑:程序博客网 时间:2024/05/29 02:21
CAS是compareAndSwap的简称,它可以帮助我们实现多线程执行的安全性。
CAS有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。虽然步骤分为两笔,比较和赋值,但CAS是在native层的unsafe类中实现的,属于硬件级别的操作,同样可以保证原子性。
下面是compareAndSwapInt方法:
public final native boolean compareAndSwapInt(Object paramObject, long paramLong, int paramInt1, int paramInt2);第一个参数Object是要修改的对象,第二个参数是要修改的变量在存储Object的内存中偏移量,通过这两个参数定位要修改的变量,第三个参数是修改之前的值,第四个参数是预期修改之后的值。
java.util.concurrent包中的atomic就是使用CAS保证原子性的。
CAS缺点
CAS存在一个很明显的问题,即ABA问题。
如果变量V初次读取的时候是A,并且在准备赋值的时候检查到它仍然是A,那能说明它的值没有被其他线程修改过了吗?如果在这段期间它的值曾经被改成了B,然后又改回A,那CAS操作就会误认为它从来没有被修改过。针对这种情况,java并发包中提供了一个带有标记的原子引用类"AtomicStampedReference",它可以通过控制变量值的版本来保证CAS的正确性。
0 0
- Java中的CAS(Compare And Swap)
- Compare and Swap(CAS)
- CAS(compare-and-swap)简介
- CAS(compare-and-swap)
- CAS(Compare and Swap)理解
- CAS(Compare and Swap)算法
- Java下CAS(Compare And Swap)并发操作测试
- CAS compare and swap lock free
- CAS:Compare And Swap 无锁
- CAS Compare and Swap 无锁算法
- [Java Concurrent Programming] Integrate CAS strategy (Compare-and-Swap) into JDK java.util.conrreut package
- java并发 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- Java并发编程--CAS(Compare And Swap)无锁算法
- 源码剖析sun.misc.Unsafe && Compare And Swap(CAS)操作
- 源码剖析sun.misc.Unsafe && Compare And Swap(CAS)操作
- cas cpu 硬件同步原语(compare and swap)
- CAS(Compare and Swap)无锁同步算法
- Compare And Swap(CAS)实现无锁多生产者
- Linux下各种环境配置(表格)
- 图像小波分解与重构
- Xshell连接不上虚拟机
- 解決 IDEA Create Maven Project 卡在 Downloading plugins for .....
- c++作业5
- Java中的CAS(Compare And Swap)
- linux_011之库函数setsid.c分析
- 学习笔记:数据库基本语法总结
- 文章标题
- MongoDB 分片 (二) Shard
- 485. Max Consecutive Ones
- CF
- Nginx比Apache高并发的原因
- 写个神经网络,让她认得我`(๑•ᴗ•๑)(Tensorflow,opencv,dlib,cnn,人脸识别)