CAS(Compare And Swap)对比交换

CAS(Compare And Swap)是一种用于实现线程安全的原子操作,它可以在不使用锁的情况下更新共享变量的值。CAS 的基本思想是通过比较当前值和预期值,如果它们相等,则将新值替换为当前值。

以下是一个使用 CAS 的示例代码,演示了如何使用 CAS 来更新一个共享变量的值:

public class CasExample {
    // 共享变量
    private int value;

    public int getValue() {
        return value;
    }

    public void setValue(intnewValue) {
        // 使用 CAS 操作更新值
        while (!compareAndSet(value, newValue)) {
            // 如果更新失败,则继续尝试
        }
    }

    public boolean compareAndSet(int expect, int update) {
        // 获取当前值
        int current = value;
        // 如果当前值等于预期值
        if (current == expect) {
            // 将新值更新为当前值
            value = update;
            // 更新成功,返回 true
            return true;
        }
        // 更新失败,返回 false
        return false;
    }

    public static void main(String[] args) {
        CasExample casExample = new CasExample();

        // 获取原始值
        int originalValue = casExample.getValue();
        System.out.println("原始值:" + originalValue);

        // 使用 CAS 操作更新值
        casExample.setValue(100);

        // 获取更新后的值
        int updatedValue = casExample.getValue();
        System.out.println("更新后的值:" + updatedValue);
    }
}

在上述示例中,compareAndSet方法接受两个参数:预期值和新值。如果当前值等于预期值,则将新值更新为当前值,并返回true;否则,返回false

setValue方法中,使用了一个while循环来不断尝试使用 CAS 操作更新值,直到更新成功为止。

main方法中,创建了一个CasExample对象,并通过getValue方法获取原始值。然后,调用setValue方法使用 CAS 操作将值更新为 100。最后,再次通过getValue方法获取更新后的值。

请注意,CAS 操作是原子性的,意味着在更新值的过程中不会被其他线程中断。如果多个线程同时尝试使用 CAS 操作更新同一个变量,只有一个线程会成功,其他线程会失败并重新尝试。这种机制可以确保共享变量的一致性和线程安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值