面试中volatile关键字如何影响程序?其工作原理是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1141个文字,预计阅读时间需要5分钟。
一位工作了6年的Java程序员,在阿里二面时,被问到volatile关键字。然后,就没有然后了。同样,另外一位去美团团面4年的小伙子,也被问到volatile关键字。然后,也没有然后了。
普通人:一个工作了6年的Java程序员,在阿里二面,被问到“volatile”关键字。
然后,就没有然后了…
同样,另外一个去美团面试的工作4年的小伙伴,也被“volatile关键字“。
然后,也没有然后了…
这个问题说实话,是有点偏底层,但也的确是并发编程里面比较重要的一个关键字。
下面,我们来看看普通人和高手对于这个问题的回答吧。
嗯… volatile可以保证可见性。
高手:volatile关键字有两个作用。
- 可以保证在多线程环境下共享变量的可见性。
- 通过增加内存屏障防止多个指令之间的重排序。
我理解的可见性,是指当某一个线程对共享变量的修改,其他线程可以立刻看到修改之后的值。
其实这个可见性问题,我认为本质上是由几个方面造成的。
-
CPU层面的高速缓存,在CPU里面设计了三级缓存去解决CPU运算效率和内存IO效率问题,但是带来的就是缓存的一致性问题,而在多线程并行执行的情况下,缓存一致性就会导致可见性问题。
本文共计1141个文字,预计阅读时间需要5分钟。
一位工作了6年的Java程序员,在阿里二面时,被问到volatile关键字。然后,就没有然后了。同样,另外一位去美团团面4年的小伙子,也被问到volatile关键字。然后,也没有然后了。
普通人:一个工作了6年的Java程序员,在阿里二面,被问到“volatile”关键字。
然后,就没有然后了…
同样,另外一个去美团面试的工作4年的小伙伴,也被“volatile关键字“。
然后,也没有然后了…
这个问题说实话,是有点偏底层,但也的确是并发编程里面比较重要的一个关键字。
下面,我们来看看普通人和高手对于这个问题的回答吧。
嗯… volatile可以保证可见性。
高手:volatile关键字有两个作用。
- 可以保证在多线程环境下共享变量的可见性。
- 通过增加内存屏障防止多个指令之间的重排序。
我理解的可见性,是指当某一个线程对共享变量的修改,其他线程可以立刻看到修改之后的值。
其实这个可见性问题,我认为本质上是由几个方面造成的。
-
CPU层面的高速缓存,在CPU里面设计了三级缓存去解决CPU运算效率和内存IO效率问题,但是带来的就是缓存的一致性问题,而在多线程并行执行的情况下,缓存一致性就会导致可见性问题。

