如何保证共享变量修改时的原子性和可见性?
使用synchronized或者volatile 可以保证可见性
因为java内存模型分为主内存(内存条)和线程私有内存(线程内存,可以认为寄存器,cpu一级缓存)
当两个线程同时操作一个类的时候,每个线程会自己有一块独立内存来存放运行的数据,这个独立内存会从主内存做一份拷贝
所以并发情况的时候,两个不同线程可能就会会对值产生各自的一个最终结果,然后两个线程并没有通知对方,导致再次同步到主内存会是脏数据
因此需要使用这些关键字来保证可见性。这两个关键字还能保证指针重排序,因为java虚拟机编译代码后会做一些优化,但是优化后也会。
保证原子性jdk提供了Atomic相关的多个类来操作
2 条评论
gongxuwang · 2021年2月16日 下午6:23
这个对我帮助很大感谢博主。
ganbu · 2021年2月15日 下午6:15
楼主威武非常感谢.