一、概念,
基于处理器指令,把比较和交换合成一个指令完成,保证了原子性;
因为是针对一个内存地址值的,一个内存地址指向一个变量,所以只对一个共享变量能保证原子性;
二、原子操作类
锁只有synchronized和显示锁;
cas不是锁,是处理器指令原子操作;
多线程下的cas原子操作,只会有一个线程操作成功;
1、
1、
2、用原子操作类对该引用类对象包装
不是版本戳引用原子操作类,原子操作类的对象中,直接将对应地址值赋予期望值作为新值;
原子操作类包装值是变成了期望值,原子操作类包装的引用对象还是没变;
java一切皆为对象,相当于原子操作类包装后自己也是一个对象;
3、版本戳的原子操作类
当第二个线程来改值时候,发现值被别的线程改过了,版本号变了,则conpareAndSet方法返回false, 没有改成自己想改的期望值,还是保留别人改过后的值和版本号;
4、数组的原子操作类
三、