CAS(compare and swap)算法

CAS

CAS(compare and swap)比较并交换
用于实现乐观锁,被广泛应用于各大框架中。
CAS 的思想很简单,就是给一个元素赋值的时候,先看看内存里的那个值到底变没变,如果没变我就修改,
变了我就不改了,其实这是一种无锁操作,不需要挂起线程,无锁的思路就是先尝试,如果失败了,进行补偿,
也就是你可以继续尝试。这样在少量竞争的情况下能很大程度提升性能

CAS在计算机底层也是三个动作:【取值】、【比较】、【赋值】,只不过这三个动作是CPU原语级别的原子动作!

import java.util.concurrent.atomic.AtomicInteger;

public class CASExample {
    // 创建一个 Atomic 原子整型变量,初始值为 0
    private static AtomicInteger value = new AtomicInteger(0);

    public static void main(String[] args) {
        // 打印初始值
        System.out.println("初始值: " + value.get());

        // 模拟多个线程对 value 进行自增操作
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                int oldValue, newValue;
                do {
                    // 读取当前值
                    oldValue = value.get();
                    // 计算新值
                    newValue = oldValue + 1;
                    // 尝试使用 CAS 算法将新值设置到原子变量中
                } while (!value.compareAndSet(oldValue, newValue)); // CAS 操作,如果失败则重试
            }).start();
        }

        // 等待所有线程执行完成
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 打印最终值
        System.out.println("最终值: " + value.get());
    }
}

我们创建了一个 Atomic 原子整型变量 value,初始值为 0。然后,我们启动了 10 个线程,每个线程都尝试对 value 进行自增操作。在每次自增操作之前,线程会先读取当前的值,然后计算出新值,并使用 CAS 算法尝试将新值设置到原子变量中。如果 CAS 操作失败(即有其他线程修改了变量的值),则线程会重新读取当前值,并再次尝试 CAS 操作,直到成功为止
我们打印出了 value 的最终值,它是经过多个线程并发自增操作后的结果。CAS 算法确保了并发自增操作的原子性和线程安全性

相关推荐

  1. <span style='color:red;'>算法</span>___

    算法___

    2024-03-22 18:48:01      36 阅读
  2. 计算机算法贪心算法

    2024-03-22 18:48:01       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-22 18:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-22 18:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-22 18:48:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-22 18:48:01       20 阅读

热门阅读

  1. 【NLP5-RNN模型、LSTM模型和GRU模型】

    2024-03-22 18:48:01       17 阅读
  2. tomcat安装及配置教程

    2024-03-22 18:48:01       22 阅读
  3. 【黑马程序员】Python多任务

    2024-03-22 18:48:01       19 阅读
  4. 力扣每日练习(3.20)补

    2024-03-22 18:48:01       15 阅读