volatile关键字
含义:
volatile的可见性
作用:
通知OS操作系统底层,在CPU计算过程中,都要检查内存中数据的有效性。保证最新的内存数据被使用。
原理:
如下图所示,程序启动时将磁盘中的字节码文件读到内存中,形成对应的对象和类对象,然后会将对象中的一些变量读到CPU的缓存中作为临时数据。CPU计算时在不中断,清空缓存的情况下,默认使用的时缓存中数据。这样的话,计算变量的值被改变,新的数据也不会被使用。
因此,为了保证最新的内存数据被使用。volatile关键字通知OS操作系统底层,在CPU计算过程中,都要检查内存中数据的有效性。
接下来用代码演示一下:
启动一个线程不断执行m()方法,在m()方法中如果b的值为true,则不断循环。在主线程中将b的值改为false,因为b加了volatile关键字,因此m()方法中的while循环每次判断条件时,都会取到最新的b的值,所以线程跳出了while循环,打印了end。
public class Test_09 {
volatile boolean b = true; //volatile关键字修饰
void m(){
System.out.println("start");
while(b){}
System.out.println("end");
}
public static void main(String[] args) {
final Test_09 t = new Test_09();
new Thread(new Runnable() {
@Override
public void run() {
t.m();
}
}).start();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.b = false;
}
}
以上就是关于volatile关键字,我的一些认识和理解,希望对你有所帮助,欢迎留言、交流、点赞、关注。谢谢!