如何保证共享变量修改时的原子性和可见性?

使用synchronized或者volatile 可以保证可见性
因为java内存模型分为主内存(内存条)和线程私有内存(线程内存,可以认为寄存器,cpu一级缓存)
当两个线程同时操作一个类的时候,每个线程会自己有一块独立内存来存放运行的数据,这个独立内存会从主内存做一份拷贝
所以并发情况的时候,两个不同线程可能就会会对值产生各自的一个最终结果,然后两个线程并没有通知对方,导致再次同步到主内存会是脏数据

因此需要使用这些关键字来保证可见性。这两个关键字还能保证指针重排序,因为java虚拟机编译代码后会做一些优化,但是优化后也会。
保证原子性jdk提供了Atomic相关的多个类来操作

 

分类: Java基础

2 条评论

gongxuwang · 2021年2月16日 下午6:23

这个对我帮助很大感谢博主。

ganbu · 2021年2月15日 下午6:15

楼主威武非常感谢.

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据