java并发问题之CAS

1,什么是CAS?
CAS(Compare-And-Swap) 比较并交换,用于实现同步和锁机制。经常配合juc中Atomic相关类进行。Atomic相关类无法解决aba问题。


2,CAS核心思想是什么?
比较和交换。
本质上就是乐观锁 + 自旋
这里需要注意的是CAS能保证原子性是介于使用CAS时,比较对象采用了Atomic相关类。如果没有,则不保证原子性。


3,CAS的基本概念
三个操作数
对象: 要比较和可能修改的对象
预期值:当前对象的预期
新值:如果与预期值相等,则更新为新值
两个步骤
比较:比较当前对象是否与预期相等
交换:如果当前对象与预期相等,则交换更新为新值


4,CAS锁的实现
CAS 锁是一种基于 CAS 操作实现的轻量级锁,通常用于实现自旋锁。它的主要优点是避免了传统锁机制的上下文切换开销,提高了并发性能。


4.1 基本实现

package com.rojer.threadCAS;
 
import java.util.concurrent.atomic.AtomicInteger;
 
/**
 * 一般情况都配合Atomic类保证其原子性
 */
public class CASExample {
    private AtomicInteger value = new AtomicInteger(0);
 
    /**
     * compareAndSet(CAS)方法的底层原理基于硬件支持的原子操作,
     * 通过 Unsafe 类封装实现。在现代处理器中,CAS 操作通常通过硬件指令(如 x86 架构上的 cmpxchg 指令)实现。
     * 这些硬件指令能够在不被其他线程打断的情况下完成读取、比较和写入操作,从而实现原子性。
     */
    public void increment() {
        int oldValue, newValue;
        do {
            oldValue = value.get();
            newValue = oldValue + 1;
        } while (!value.compareAndSet(oldValue, newValue));
    }
 
    public int getValue() {
        return value.get();
    }
 
    /**
     * 错误的示例
     */
    private Integer value1 = 0;
 
    public void increm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值