一段代码,两个线程操作一个数
线程不安全,改良加锁
性能低,改良用atomic
atomic实现机制CAS机制
CAS机制:修改内存中变量A的值从10到11的过程:
1、查询出A,旧值为10
2、update A,判断A的当前值是否为10(如果有其他线程修改过就不为10了),如果为10 ,更新值到11
3、如果不为10,则自旋(重复上边动作) 成功为止
优点:
和同步锁比较:一个悲观所一个是乐观锁
缺点:
1、大并发消耗cpu
2、只能控制到变量,无法到代码块
3、ABA问题
什么是ABA问题:
线程1获取变量值为10,此时其他线程抢占资源,将值改成11,然后又将值从11改回10, 然后线程1获取资源继续执行发现变量值还是10没有改变, 所以他认为变量是不变的 , 但有些场景此值是变动过的。
解决:增加版本号,update的时候不紧要比较值还要比较版本号