JMM(Java内存模型),要求多线程程序:1.数据可见性,2.原子性,3.有序性;
怎么保证这三点呢?
变量使用volatile关键字,可以使工作内存数据改变后立刻刷回主内存,并通知其他线程取主内存数据,从而保证数据对所有线程可见;
但是,volatile不能保证原子性,因为数据从工作内存刷回主内存这一操作在多线程下是线程不安全的;
如何保证原子性?
1.使用synchronize关键字;
2.使用原子类,
原子类为什么能保证原子性?
因为原子类对数据操作底层是自旋锁+CAS,也就是说,一个线程:得等线程刷回主内存之后,拿到最新主内存数据之后,在主内存基础上再加一,从而保证原子性和线程安全;
标签:回主,CAS,原子,初识,线程,内存,保证,数据 来源: https://www.cnblogs.com/yyjh/p/16526260.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。