讲一下volatile涉及的Java内存模型?

发布于 2019-12-27 09:18:45
关注者
1
被浏览
1256
1 个回答
  • 面试哥
    面试哥 2019-12-27
    为面试而生,有面试问题,就找面试哥。

    在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致


    数据不一致

    要解决这个问题,就需要把变量声明为volatile,这就指示 JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。

    说白了, volatile 关键字的主要作用就是保证变量的可见性然后还有一个作用是防止指令重排序。


    volatile关键字的可见性

面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看