`
翟健
  • 浏览: 3521 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
查阅地址: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类型的变量是一种比较轻量级的加锁方式,但不能对整段代码加锁
禁止重排序本质上不会强制要求指令执行必须有序,只是命令的执行具有了可见性(仅为个人理解,不知道对不对)
分享到:
评论

相关推荐

    深入理解 Java 内存模型.pdf

    java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰java程序员,本文试图揭开java内存模型神秘的面纱。本文大致分三部分:重排序与顺序一致性;三个同步原语(lock,volatile,final)的内存语义,重...

    深入理解Java内存模型.程晓明(带书签文字版).pdf

    Java 内存模型的抽象 4 重排序 6 处理器重排序与内存屏障指令 7 happens-before 10 重排序 13 数据依赖性 13 as-if-serial 语义 13 程序顺序规则 15 重排序对多线程的影响 15 顺序一致性 19 数据竞争与顺序...

    深入理解java内存模型

    Java内存模型的抽象 重排序 处理器重排序与内存屏障指令 happens-before 重排序 数据依赖性 as-if-serial 语义 程序顺序规则 重排序对多线程的影响 顺序一致性 数据竞争与顺序一致性保证 顺序一致性内存模型 同步...

    深入理解 Java 内存模型 - v1.0

    详细介绍Java内存,ava线程之间的通信对程序员完全透明,内存可见性问题很容易困扰java程序员,本文试图揭开java内存模型神秘的面纱。本文大致分三部分:重排序与顺序一致性;三个同步原语(lock,volatile,final)...

    深入理解Java内存模型

    Agenda: •什么是Java内存模型JMM •内存可见性 •有序性 •指令重排序 •内存屏障 •顺序一致性与Happens-before规则 •volatile, synchronized, 原子变量,锁, final的原理

    深入理解JAVA内存模型(高清完整版)

    对JMM大致的介绍了一下,尤其是同步原语synchronized,volatile,final有一个很详细的介绍,可以学习学习

    JMM(Java内存模型)及Volatile底层实现原理.md

    Java内存模型及Volatile底层实现原理

    深入理解Java内存模型??volatile

    理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码: class VolatileFeaturesExample { ...

    并发编程基础知识,java内存模型及多线程、volatile

    Java内存模型,即:JMM。当程序执⾏并⾏操作时,如果对数据的访问和操作不加以控制,那么必 然会对程序的正确性造成破坏。因此,我们需要在深⼊了解并⾏机制的前提下,再定义⼀种规则, 来保证多个线程间可以有效地...

    java volatile 关键字实战

    java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...

    Java内存模型.mmap.xmind

    java内存模型思维导图--内存模型抽象,重排序,final,顺序一致性,锁,volatile,concurrent包的实现

    java并发编程与内存模型

    描述java并发编程原理 一.内存模型的相关概念 二.并发编程中的三个概念 三.Java内存模型 四..深入剖析volatile关键字 五.使用volatile关键字的场景

    18Java内存模型:Java中的volatile有什么用?1

    这一点我们在第 15 节课和第 16 节课 已经分析过了。为了解决这个问题,Java 语言在规范中做出了明确的规定,也就是在 JSR 133 文档中规定了 Ja

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。  《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是...

    Java内存模型与volatile关键字

    Java内存模型(Java Memory Model)  Java内存模型(JMM),不同于Java运行时数据区,JMM的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中读取数据这样的底层细节。JMM规定了...

    Java面试-讲一讲什么是Java内存模型

    讲一讲什么是Java内存模型 Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到。但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着。 这是一个比较开放的题目,...

    Java 并发核心编程

    这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发...

    Java理论与实践:修复Java内存模型2

    本文介绍了Java平台从一开始就包括了对线程的支持,包括一个计划为正确同步的程序提供“一次编写,到处运行”保证的、跨平台的内存模型,但是原来的内存模型有一些漏洞。虽然许多Java平台提供了比JMM所要求的更强的...

    Java并发编程学习笔记

    本文档主要内容如下: 1、线程安全和锁 Synchronized 底层实现原理 2、可重入锁与 Synchronized 的...9、ThreadLocal 为什么会内存泄漏 10、Volatile底层实现原理 11、AQS源码分析 12、CAS原理分析和使用场景 13、.....

Global site tag (gtag.js) - Google Analytics