java关键点总结:
volatile:保证可见性visibility (并不能保证原子性)
java线程会缓存变量的值,可能导致缓存值和主内存的值不一致。即缓存一致性问题。Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。
如果一个变量被volatile
所修饰的话,在每次数据变化之后,其值都会被强制刷入主存。在读取时,被volatile其修饰的变量在每次是用之前都从主内存刷新。
有序性: volatile
除了可以保证数据的可见性之外,还有一个强大的功能,那就是他可以禁止指令重排优化等
参考:
1. 深入理解Java中的volatile关键字 - 掘金
2. volatile Keyword in Java - GeeksforGeeks
3. Guide to the Volatile Keyword in Java | Baeldung