首页 > 编程语言 > 详细

Java CAS

时间:2021-04-02 12:31:38      阅读:16      评论:0      收藏:0      [点我收藏+]

什么是CAS (compare and set)

顾名思义,就是先比较再设值。它的功能是判断内存某个值是否为预期值,如果是则更改为新的值,这个过程是原子的。
拿一个Java例子来体会下:

package com.lantian3.learn.learn.juc;

import java.util.concurrent.atomic.AtomicInteger;

public class CASDemo {
    public static void main(String[] args) {
        AtomicInteger atomicInteger = new AtomicInteger(5);
        // 第一个参数代表期望主物理内存的当前值,第二个参数代表希望修改成的值。
        // 如果第一个参数等于主物理内存的当前值,那么当前值将被修改为第二个参数的值。
        // 如果第一个参数不等于主物理内存的当前值,那么修改失败,值不变。
        boolean b = atomicInteger.compareAndSet(5, 8);
        System.out.println(b + ":    current value--------" + atomicInteger);
        boolean boo = atomicInteger.compareAndSet(5, 80);
        System.out.println(b + ":    current value--------" + atomicInteger);
    }
}

> Task :CASDemo.main()
true:    current value--------8
true:    current value--------8

从结果可以看出,第一次修改成功,第二次修改失败。

通常为了兼顾效率和性能,如非必须,并不鼓励使用synchronized ,而使用JUC下的此类操作来代替。

Java CAS

原文:https://www.cnblogs.com/phplantian/p/14609832.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!