程序员谈话系例——今天我们来谈一下volatile关键字

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

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

二,谈一下volatile和synchronized的区别

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

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

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

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

原文地址:https://www.cnblogs.com/ffdsj/p/12396917.html