JAVA中CAS原理

在Java中,CAS(Compare-and-Swap)是一种无锁算法,通过JNI(Java Native Interface)调用本地方法来利用处理器提供的原子指令实现。它可以保证在多线程环境下的原子性和可见性,而无需使用传统的锁机制。以下是一个简单的Java示例,通过java.util.concurrent.atomic包下的AtomicInteger类来演示CAS的原理:

import java.util.concurrent.atomic.AtomicInteger;

public class CASExample {
    public static AtomicInteger atomicInteger = new AtomicInteger(0);

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                // 使用CAS尝试将原子整数增加1
                while (true) {
                    // 获取当前值
                    int currentValue = atomicInteger.get();
                    // 计算新的期望值
                    int newValue = currentValue + 1;
                    // 使用compareAndSet方法尝试原子地更新值
                    if (atomicInteger.compareAndSet(currentValue, newValue)) {
                        // 更新成功,退出循环
                        break;
                    } else {
                        // 更新失败,当前值已被其他线程改变,继续循环尝试
                    }
                }
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                // 同理,第二个线程也在尝试增加原子整数
                while (true) {
                    int currentValue = atomicInteger.get();
                    int newValue = currentValue + 1;
                    if (atomicInteger.compareAndSet(currentValue, newValue)) {
                        break;
                    }
                }
            }
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 最终打印的结果将是20000,表明两个线程的操作是互斥且原子完成的
        System.out.println("Final Value: " + atomicInteger.get());
    }
}

上述代码中,我们创建了两个线程t1t2,每个线程都在尝试递增一个共享的AtomicInteger实例。compareAndSet方法接受两个参数:当前预期的值和新的值。这个方法尝试将原子整数的值从预期的当前值更新为新值,如果当前原子整数的实际值与预期值相匹配,则更新,并返回true;如果不匹配,则不执行更新操作并返回false。这意味着即使在高并发环境下,多个线程同时尝试更新同一变量时,只有一个线程能成功完成更新,其余线程将继续循环尝试直至成功,从而确保了在无锁的情况下也能实现并发控制和数据一致性。

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

semicolon_helloword

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值