手机版

cas是什么意思中文? 你知道什么是CAS吗?

751次浏览     发布时间:2024-03-03 11:47:32    


CAS英文是Compare And Swap/Set,即比较并交换。

CAS的实现原理:它包含3个参数 CAS(V,E,N)。V 表示要更新的变量(内存值),E表示预期值(旧的),N表示新值。如果内存位置V的值与预期原值E相匹配,那么处理器会自动将该位置值更新为新值N,返回true。否则处理器不做任何操作,返回false。

CAS的缺点:只能保证对一个变量的原子性操作,长时间自旋会给CPU带来压力,可能会存在ABA问题。

什么是ABA问题:

CAS实现一个重要前提需要取出内存中某时刻的数据,而在下一时刻比较并替换,那么在这个时间差类会导致数据的变化。比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且two进行了一些操作变成了B,然后 two又将V位置的数据变成 A,这时候线程one进行CAS操作发现内存中仍然是A,然后 one 操作成功。尽管线程one 的 CAS操作成功,但是不代表这个过程就是没有问题的。部分乐观锁的实现是通过版本号(version)的方式来解决ABA问题,乐观锁每次在执行数据的修改操作时,都会带上一个版本号,一旦版本号和数据的版本号一致就可以执行修改操作并对版本号执行+1 操作,否则就会失败。因为每次操作的版本号都会随之增加,所以不会出现ABA问题,因为版本号只会增加不会减少。

【答案解析】

AtomicInteger类中有CAS的使用,样例代码如下:

import java.util.concurrent.atomic.AtomicInteger;

public class CASTest {

    public static void main(String[] args) {
        // 创建一个原子类
        AtomicInteger atomicInteger = new AtomicInteger(5);
        /**
         * 一个是期望值,一个是更新值,但期望值和原来的值相同时,才能够更改
         * 假设三秒前,我拿的是5,也就是expect为5,然后我需要更新成 2019
         */
        System.out.println(atomicInteger.compareAndSet(5, 2019) + "\t current data: " + atomicInteger.get());

        System.out.println(atomicInteger.compareAndSet(5, 1024) + "\t current data: " + atomicInteger.get());
    }
}


相关文章:

穿错衣服就要被抓?明朝穿戴竟还有这些讲究! 04-21

明朝才女有哪些,世家出身,才情堪比李清照,培养的孩子也个个拔尖 04-21

明朝大将李如松意外阵亡,让李成梁的计划完全落空,明末辽东局势万劫不复 04-21

明朝的亡国之君 ,傀儡皇帝光绪,为何常被人放在一起比较? 04-21

八百年前,明朝的衣食住行方面是如何炫富的? 04-20

明朝相当皇帝身边的大内侍卫?只会功夫不行,还得上知天文下知地理 04-20

宋朝的gdp占世界80%?英国经济专家:一个以讹传讹的历史谣言 04-20

明朝上的十大灾难(七)甲申之变 04-20

唐朝疆域划分 :西到黑海,南抵印度洋,北至北冰洋 04-20

他是明朝三大才子之一,明朝第一位内阁首辅,最后竟被埋雪堆里冻死 04-19