编程语言
首页 > 编程语言> > Java多线程之通俗易懂讲解CAS

Java多线程之通俗易懂讲解CAS

作者:互联网

什么是CAS机制

CAS即CompareAndSet被称之为无锁优化,从设计思想来说CAS属于乐观锁

CAS原理

int count = 0;
compareAndSet(count, 1, 2)

此代码块需要对count执行加1操作此处的count就相当于下图中的valueOffset,1就相当expect,2就相当于update,如果expect等于valueOffset才会将count设为2也就是图中的update,如果不相等则重新预估expect的值直到成功为止,这个不断预估expect值的过程称之为自旋,是在内存中进行的。
在这里插入图片描述
为什么要进行count是否等于expect的比较呢?我们可以想象一种 高并发的场景,有多个线程需要同时对count进行加1操作如果线程1一开始获取到了count的值为1,此时的expect值为1,update为2,当线程1还没执行完对count的加1操作时CPU分配给线程1的时间片到了,这个时候线程2进来了执行了对count的一个自增操作count变为了2,当再次轮到线程1操作时如果不进行valueOffset是否等于expect的操作就会导致count重新变回1,这样就出现了线程不安全的问题。

CAS机制代码演示

在这里插入图片描述

ABA问题以及解决方案

CAS机制的缺点

标签:count,Java,CAS,valueOffset,线程,expect,多线程,CPU
来源: https://blog.csdn.net/bkqkl/article/details/105906282