Java高级技术第五章——聊聊volatile关键字

前言

前言点击此处查看:
http://blog.csdn.net/wang7807564/article/details/79113195

Volatile关键字

volatile 关键字,使一个变量在多个线程间可见,即保证了线程间的可见性。这与C/C++中的同名关键字存在区别,在面试的时候,不要弄混了。
A、B线程都用到一个变量,JAVA默认是A线程中保留一份copy作为缓冲,这样如果B线程修改了该变量,则A线程未必知道。但是,如果使用volatile关键字声明,则可以保证数据的修改,对所有的线程都能够实时读取。
JVM的内存模型如下图所示:

可见,JVM为每一个线程创建了一个线程栈(Thread Stack),线程栈保存每个线程的私有变量,这个变量的内容可以是基本数据类型,也可以是一个对象的引用,而对象的实体和静态变量是存放在中的。
volatile并不能保证多个线程共同修改变量时所带来的不一致问题,也就是说volatile不能替代synchronized.这也就是我们说的,synchronized可以保证可见性和原子性,volatile只能保证可见性。如果用volatile不用锁的话,可以提高并发性。
如果面试官问你volatile关键字的原理,那么只要你不要忘记JVM的内存模型,一般都不会有什么大问题。

猜你喜欢

转载自blog.csdn.net/wang7807564/article/details/80008410