美文网首页系列Java
volatile 关键字

volatile 关键字

作者: happyJared | 来源:发表于2019-07-06 09:41 被阅读63次

    volatile 关键字的作用:就是保证变量的可见性,防止指令重排序

    在 JDK1.2 之前,Java 的内存模型实现总是从主存读取变量,是不需要进行特别注意的;而在当前的 Java 内存模型下,线程通常是把变量先保存本地内存中,而不是直接在主存中进行读写,这就可能造成一个线程在主存中修改了变量的值,而另外一个线程还继续使用着在寄存器中的变量值副本,造成数据的不一致

    数据不一致

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

    volatile关键字的可见性

    synchronized 关键字和 volatile 关键字对比:

    1. volatile 关键字是线程同步的轻量级实现,所以 volatile 性能肯定要比 synchronized 关键字好**;
    2. volatile 关键字只能修饰变量,而 synchronized 关键字可以修饰方法以及代码块;
    3. 多线程访问 volatile 关键字不会发生阻塞,而 synchronized 关键字可能会发生阻塞;
    4. volatile 关键字是保证数据的可见性,但不保证数据的原子性,而 synchronized 关键字两者都能保证;
    5. volatile 关键字解决的是变量在多个线程之间的可见性,而 synchronized 关键字解决的是多个线程间访问资源的同步性。

    相关文章

      网友评论

        本文标题:volatile 关键字

        本文链接:https://www.haomeiwen.com/subject/hcashctx.html