作为一名java程序员,求职面试时,关于volatile关键字时常会遇到。张工最近到某知名互联网公司面试,面试官提出这样的一个问题:
谈谈你对volatile关键字的理解
张工一时间没有回答上来,面试官:你都工作三年了,怎么对volatile关键字都没掌握啊。
张工被面试官这么一说,都不好意思了。
对于一名java开发者,不管是在求职面试还是项目实际开发中,volatile都是一个需要掌握的知识点,是需要掌握好的。我们平时在阅读源码的过程中,时常会遇到volatile关键字,譬如Atomic类,通过源码我们会发现volatile无处不在。
为什么要用到volatile关键字?
在Java多线程的开发中有三种特性:
原子性
可见性
有序性
volatile主要作用是保证内存可见性和防止指令重排序。
保持内存可见性
内存可见性(Memory Visibility):所有线程都能看到共享内存的最新状态。可见性就是指当一个线程修改了线程共享变量的值,其它线程能够立即得知这个修改。
每一个线程都有一份自己的本地内存,所有线程共用一份主内存。如果一个线程对主内存中的数据进行了修改,而此时另外一个线程不知道是否已经发生了修改,就说此时是不可见的。