简单明了的白话文,俗称说人话,每次都说的那么高大上,让我们难以理解,所以我在此记录一下,我的理解!
1、CAS是什么?
1.CAS翻译过来就是(比较交换)的意思,比较交换好理解吧,没错,就是我们理解的那种意思。就比如你本来想买西瓜,你想的西瓜是10块钱一个,然后你就拿10块钱去商家那里买,然后你一(比较)说:为啥你家的西瓜15块一个,你给老子等着,老子回家拿钱去,然后就等到钱拿到了,一看你家西瓜又涨价了,周而复始的回家拿钱,然后你终于拿到了西瓜,这就是(交换)
2、CAS到底做了什么事?
众所周知(不知道的你可以回家把书在看看),
java里面有乐观锁和悲观锁,
悲观锁:悲观锁就是一个线程拿到锁以后,其他线程就被挂起,除非拿到锁的线程,释放锁,其他线程在抢锁,周而复始,但是这样虽然保证了数据的一致性、唯一性,但是性能方面却很差,因为每次都只有一个线程进去干活,其他线程暂时等待!
乐观锁:乐观锁是什么呢?那就是我们今天的主角,CAS闪亮登场,我们的CAS的基本值有三个:内存地址、预期原值、新值
比如我们有两个线程同时争夺,A=1 第一个线程: A=A+2,第二个线程:A=A+1,怎么保证A一定是4呢?
首先两个线程会拿到内存地址和预期原值(也就是A=1),然后判断第一个线程如果先运行了,那么A就变成了3,这时候第二个线程发现内存地址是一样,但是预期的原值不一样,这个时候他就会执行失败返回,然后拿新值以后,再次循环这时候跟预期原值比较就一样了,然后就可以加1了