Java并发中的CAS

96 篇文章 3 订阅 ¥9.90 ¥99.00
本文介绍了CAS(Compare and Swap)在Java并发编程中的作用,作为乐观锁机制,它保证了数据一致性。CAS操作包含三个参数,当内存中的值与预期值相等时更新变量。然而,CAS存在自旋问题,可能导致CPU资源浪费。JDK的Unsafe类提供了compareAndSwap*方法来支持CAS操作。
摘要由CSDN通过智能技术生成

1. CAS原理介绍

CAS是什么:是一种常见的降低读写锁冲突,保证数据一致性的乐观锁机制。

在上一篇文章中提到,volatile主要是解决共享变量可见性的一种机制,但是确无法解决读—改—写的原子操作。

而本文介绍的CAS是原子操作的一种。可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。

该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。CAS算法CAS(V, E, N)包含3个参数,

V表示要更新的变量,

E表示预期的值,

N表示新值。

在且仅在V值等于E值时,才会将V值设为 N,如果V值和 E值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS返回当前V的真实值。
Concurrent包下所有类底层都是依靠CAS操作来实现,JDK里面的Unsafe类提供了一系列的 compareAndSwap* 方法,而sun.misc.Unsafe为我们提供了一系列的CAS操作。

2. CAS会遇到的问题

  • ABA问题

  • 自旋问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值