Java 内存屏障 Memory Barrier 及 volatile 关键字

更多 Java 并发编程方面的文章,请参见文集《Java 并发编程》


Java 内存模型如下图所示:


Java 内存模型

内存屏障 Memory Barrier

处于性能优化的目的,编译器和 CPU 可能会对代码及指令进行重排序。


重排序

内存屏障 Memory Barrier 是一个 CPU 指令,先于该命令的先执行,后于该命令的后执行,并强制更新一次 CPU 缓存。

volatile 关键字

线程中每次使用 volatile 变量时,都会首先将变量的值从 主存 同步到线程的 本地内存 中变量的副本。
因此,volatile 关键字保证了变量对线程的可见性,但是不能保证原子性!

实现:
若某个变量被 volatile 关键字修饰

  • 写操作之后,插入一个写屏蔽指令,更新缓存
  • 读操作之后,插入一个读屏蔽指令

你可能感兴趣的:(Java 内存屏障 Memory Barrier 及 volatile 关键字)