这里就引出了一个新的关键字volatile
,它就可以保证多个线程操作共享数据内存中的数据是彼此可见的。底层是通过内存屏障
,我们可以理解volatile修饰的变量是在主存中的数据
直接操作。
读写变量都在 主存
中直接操作,进而保证多线程可见性。而且效率上要比同步锁高的多。
其实有说volatile效率底,是因为jvm底层有个指令排序,但使用volatile修饰的变量会有一个禁止指令重排
限制
... // 使用volatile修饰变量 private volatile boolean flag = false; ...
就可以解决多个线程操作共享数据彼此不可见问题
volatile只是一个相比synchronized来说较为轻量级
的同步策略
互斥性
原子性
后面我们在谈论下有关变量原子性和CAS算法问题
尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili尚学堂给同学们带来全新的Java300集课程啦本课程为Java300集2022版第一季,配合最新版的Java课程,所有视频重新录制,课件所有图形做了重新绘制和配色,图解学习Java,让学习成为一种享受本套教程专门为零基础学员而制,适合准备入行Java开发的零基础学员,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。后续课https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.999.0.0