初识CAS
作者:互联网
JMM(Java内存模型),要求多线程程序:1.数据可见性,2.原子性,3.有序性;
怎么保证这三点呢?
变量使用volatile关键字,可以使工作内存数据改变后立刻刷回主内存,并通知其他线程取主内存数据,从而保证数据对所有线程可见;
但是,volatile不能保证原子性,因为数据从工作内存刷回主内存这一操作在多线程下是线程不安全的;
如何保证原子性?
1.使用synchronize关键字;
2.使用原子类,
原子类为什么能保证原子性?
因为原子类对数据操作底层是自旋锁+CAS,也就是说,一个线程:得等线程刷回主内存之后,拿到最新主内存数据之后,在主内存基础上再加一,从而保证原子性和线程安全;
标签:回主,CAS,原子,初识,线程,内存,保证,数据 来源: https://www.cnblogs.com/yyjh/p/16526260.html