这个关键字主要是保证了对其它线程的可见性和代码执行的有序性
可见性:
当一个变量被定义为Volatile类型时,任何对它的修改都会立即刷新到主内存中,而不是等到线程结束或者锁被释放。同时,当其他线程需要访问这个变量时,它们会从主内存中读取最新的值。这样就保证了线程间数据的一致性。
有序性:
防止指令重排序
内存屏障(memorybarrier)是一个CPU指令,这条指令可以确保一些特定指令的执行顺序。插入一个内存屏障,相当于告诉CPU和编译器先于这个命令的必须先执行,后于这个命令的必须后执行。内存屏障另一个作用是强制更新一次不同CPU的缓存。
使用场景:
一般用在多线程读单线程写的场景,在这种情况下,Volatile可以用来作为标识完成、中断或状态变化的标记。它的主要作用是确保在读取那个时刻读到的确实是最新值,利用其可见性特性。