深入理解Java内存模型的学习笔记四(volatile)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 深入理解Java内存模型的学习笔记四(volatile)

深入理解Java内存模型的学习笔记四(volatile)

 2015/2/11 9:36:23  翟健  程序员俱乐部  我要评论(0)
  • 摘要:查阅地址:http://ifeve.com/java-memory-model-4/volatile特性1、相当于对volatile共享变量做了同步2、volatile变量的写对读具有可见性3、单个volatile变量具有原子性,但类似volatile++不具有可见性volatile类型变量对内存可见性的影响1、A线程写volatile变量之前的所有变量,在B线程读同一个volatile变量后,会对B可见volatile写读的内存语义1、线程A写一个volatile变量时
  • 标签:笔记 学习 Java 理解 学习笔记 内存
查阅地址:http://ifeve.com/java-memory-model-4/
volatile特性
   1、相当于对volatile共享变量做了同步
   2、volatile变量的写对读具有可见性
   3、单个volatile变量具有原子性,但类似volatile++不具有可见性
volatile类型变量对内存可见性的影响
   1、A线程写volatile变量之前的所有变量,在B线程读同一个volatile变量后,会对B可见
volatile写读的内存语义
   1、线程A写一个volatile变量时,实质上把写变量前的所有写从本地内存都刷新到主内存,相当于发了一条已经修改变量的消息
   2、线程B读了一个volatile变量时,实质上从主内存读,更新本地内存,相当于发了一条接受了已修改变量的消息
   3、线程A对一个volatile变量的写,随后线程B对此volatile变量读,相当于线程A对线程B发送消息
volatile语义的实现
   1、在编译期间插入屏障来阻止某些重排序(详情请看原文)
为什么要增强volatile的语义
   1、在旧的内存模型里,volatile语义较弱,允许volatile类型和普通类型变量的重排序,但为了让单个volatile变量完全具有和锁同样功能,同样语义,所以在新的模型中,增强了volatile的语义
   2、volatile类型的变量是一种比较轻量级的加锁方式,但不能对整段代码加锁
禁止重排序本质上不会强制要求指令执行必须有序,只是命令的执行具有了可见性(仅为个人理解,不知道对不对)
发表评论
用户名: 匿名