我想问问各位HR,你们会选择骑牛背稳马(没有辞职)的面试者吗【HR再来回答】

volatile写:当写一个volatile变量的时候JMM会把這个线程的本地内存中的共享变量全部刷新到主内存。注意是全部,而不是仅仅volatile变量
volatile读:当读一个volatile变量的时候JMM会将这个线程的本地内存置为无效,然后从主内存中读取共享变量

以上两步一起来看的话,读线程在读一个volatile变量的时候写线程在写这个volatile变量之前的所有对共享变量的操作都会立即变得对读线程可见。

之前说到过重排序分为编译器和处理器重排两种。为了实现volatile的语义呢JMM会限制这两种重排序。

  1. 后一个操作的volatile写的时候不管前一个操作是什么,都不能重排序
  2. 前一个操作是volatile读的时候,不管后一个操作是什么都不能重排序。
  3. 前┅个操作volatile写后一个操作volatile读,不能重排序

编译器在生成字节码的时候,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序

授予烸个自然月内发布4篇或4篇以上原创或翻译IT博文的用户不积跬步无以至千里,不积小流无以成江海程序人生的精彩需要坚持不懈地积累!

#1024程序员节#活动勋章,当日发布原创博客即可获得

授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户本勋章将于次周周三上午根据鼡户上周的博文发布情况由系统自动颁发。


推荐关注我的公众号和写博神器 OpenWrite

我要回帖

更多关于 牛为什么不让骑 的文章

 

随机推荐