volatile
volatile这个单词在英文之中的意思是:易变的,不稳定的的含义。
Java volatile
在Java中有volatile关键字,Java之中volatile的作用是:
-
确保内存可见性:读写变量具有全局有序性,保证当前线程读到的值是内存中最新的,而不是当前线程中缓存中的值。但是volatile关键字并不保证线程读写变量的相对顺序,所以适用场景有限。
-
禁止指令重排序(happens-before原则):指令重排序是JVM为了提高运行程序的效率,在不影响单线程执行结果的前提下,对指令的执行过程进行优化。注意是单线程,多线程下指令重排序就可能会影响结果。
注意Java的有序性是指:
- 在当前线程读写操作前的修改操作的值对当前操作可见。
- 在进行指令优化时,不能将在对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行。
C++ volatile
A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressive optimizations must be avoided.
C++中的volatile有三个性质:<