java内存模型总结-volatile

1、volatile特性

  • 可见性:对一个volatile的读总能看到(任意线程)对这个volatile变量最后的写入。
  • 原子性:任意单个volatile变量的读/写具有原子性,但是类似volatile++这样的复合操作不具有原子性。

2、volatile的内存语义

当写一个volatile变量时,JMM会把该线程对应的问题内存中的共享变量刷新到主内存中。

当读一个volatile变量时,JMM会把该线程本地内存置为无效。线程接下来将从主内存中读取共享变量。

为了实现volatile的内存语义,编译器在生成字节码时,会在指令序列中插入内存屏障,禁止特定类型的处理器重排序。

  • volatile写操作的前面插入storestore屏障,禁止上面的普通写和下面的volatile写重排序。
  • volatile写操作后面插入storeload屏障,禁止上面的volatile写操作可能与下面存在的volatile读/写操作重排序。
  • volatile读操作后面插入loadload屏障,禁止下面所有的普通读操作与volatile读操作重排序。
  • volatile读操作后面插入loadstore屏障,禁止下面所有的普通写操作与上面的volatile操作重排序。
    原文作者:java内存模型
    原文地址: https://blog.csdn.net/i_history/article/details/79301037
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞