更多 Java 并发编程方面的文章,请参见文集《Java 并发编程》
Java 内存模型如下图所示:
内存屏障 Memory Barrier
处于性能优化的目的,编译器和 CPU 可能会对代码及指令进行重排序。
内存屏障 Memory Barrier 是一个 CPU 指令,先于该命令的先执行,后于该命令的后执行,并强制更新一次 CPU 缓存。
volatile 关键字
线程中每次使用 volatile 变量时,都会首先将变量的值从 主存 同步到线程的 本地内存 中变量的副本。
因此,volatile 关键字保证了变量对线程的可见性,但是不能保证原子性!
实现:
若某个变量被 volatile 关键字修饰
- 写操作之后,插入一个写屏蔽指令,更新缓存
- 读操作之后,插入一个读屏蔽指令