zoukankan      html  css  js  c++  java
  • 程序员谈话系例——今天我们来谈一下volatile关键字

     一,Java内存模型于volatile关键字的关系

    在JDK1.2之前,Java内存模型实现总是从主存读取变量,在到了现在线程可以把变量保存在本地内存中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,其他线程还继续从寄存器当中读取变量值的拷贝,从而造成了变量不一致的情况。那就需要把变量声明成volatile,这就指示JVM这个变量是不稳定的,每次使用它都要到主存中进行读取。也就是保证了变量的可见性防止指令重排。

    二,谈一下volatile和synchronized的区别

    1.volatile关键字是线程同步的轻量级实现,所以性能上会比synchronized好得多,但是前者只能作用于变量,而sychronized可以修饰方法和代码块。实际场所下还是synchronized用的比较多一点。

    2.多线程访问volatile不会造成阻塞,而synchronized会导致阻塞。

    3.volatile关键字能够保证数据的可见性,但是不能保证数据的原子性,而sychronized关键字两者都能保证。

    4.volatile关键字主要用于解决变量在多个线程之间的可见性,而sychronzed关键字解决的是多个线程之间访问资源的同步性。

  • 相关阅读:
    Spring一些常用注解及其作用
    Spring、Springboot、Springcloud的区别
    JVM常见配置
    Statement对象
    运算符优先级
    Java中的关键字有哪些?
    Servlet生命周期
    String类型的认识以及编译器优化
    JSTL--简单标签
    JSTL--表达式操作
  • 原文地址:https://www.cnblogs.com/ffdsj/p/12396917.html
Copyright © 2011-2022 走看看