本文基于jdk8
本文所讲的一些原理都是在多线程中经常使用的内容。
参考:黑马程序员深入学习Java并发编程,JUC并发编程全套教程_哔哩哔哩_bilibili
目录
volatile原理
volatile是在多线程情况下一个常见的关键字,其作用的防止指令重排序和保证变量的可见性。要想了解其底层原理,要先知道Java内存模型相关的一些概念。
Java内存模型(JMM)
这里只是大概讲一下Java内存模型。
JMM决定一个线程对共享变量的写入何时对另一个线程可见,JMM定义了线程和主内存之间的抽象关系:共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存保存了被该线程使用到的主内存的副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。
可以大概这么理解
可见性&有序性
使用了volatile关键字后,某个线程对于共享变量的修改,其他线程可以立马知道最新修改后的值。
某个线程执行一些被volatile修饰的变量的代码是按照顺序来执行的。
这是用到了内存屏障。内存屏障由读屏障和写屏障构成。
- 可见性
- 写屏障保证在该屏障之前对共享变量的改动都会同步到主存中
- 读屏障保证