volatile作为并发问题不得不谈的一个关键字,在代码层面简简单单的一个关键字却解决了很大一部分的并发程序问题,我们常常遇到并发问题就会想到使用synchronized和volatile,有时候甚至到了胡乱用的程度,因为我们压根就不知道使用volatile解决的到底是什么问题,要究其根本还是我们对于产生并发问题的核心不了解,所以为了更清楚的知道这些关键字后面所代表的意义,那么就有必要深挖一下这些关键字背后到底做了什么操作,解决了什么问题。
首先这里我们将从volatile解决了哪两个方面的问题,然后我们下面针对这两个方向来逐个击破这些问题的起源以及解决方案,最后又是如何体现在volatile关键字里的。
从全局上来说,并发层面的问题主要包含三个,一是CPU切换指令执行导致的原子性问题,二是CPU缓存导致的可见性问题,三是编译器和操作系统进行指令优化导致的指令重排序问题。在代码层面volatile是针对指令重排序问题和缓存可见性问题的解决方案,下面我们来逐个说明它是如何解决的。
查看全文:
本文转自 深入理解volatile - 知乎,如有侵权,请联系删除。