转自:http://blog.csdn.net/hqq2023623/article/details/51011434
volatile
理解volatile特性的一个好方法:
把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步
锁的happens-before规则保证释放锁和获取锁的两个线程之间的内存可见性,
这意味这对一个volatile变量的读,总是能看到任意线程对这个volatile变量最后的写入值
锁的语义决定了临界区代码的执行具有原子性
如果是多个volatile操作或类似于volatile++这种复合操作,这些操作整体上不具有原子性
从JSR-133开始,volatile变量的写-读可以实现线程之间的通信
从内存语义的角度来看:
1.volatile的写-读与锁的释放-获取有相同的内存效果
2. volatile写和锁的释放有相同的内存语义
3. volatile读与锁的获取有相同的内存语义
锁释放和获取的内存语义
当线程释放锁的时候,JMM会把线程对应的本地内存中的共享变量刷新到主内存中
当线程获取锁时,JMM会把线程对应的本地内存置为无效,
从而使得被监视器保护的临界区代码必须要从主内存中去读取共享变量
volatile写-读的内存语义
当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存
当读一个volatile变量时,JMM会把线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量
相关推荐
有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求...
理解`volatile`内存语义有助于编写更可靠的并发程序。 1. Java内存模型(JMM) Java内存模型(JMM)是一个抽象的概念,它定义了线程如何访问共享变量的规则,以解决数据一致性问题。JMM规定所有变量存储在主内存中...
JSR-133 为什么要增强 volatile 的内存语义 40 锁 42 锁的释放-获取建立的 happens before 关系 42 锁释放和获取的内存语义 44 锁内存语义的实现 45 concurrent 包的实现 52 FINAL 55 写 final 域的重排序规则...
Java内存模型(JMM)对`volatile`变量定义了特殊的规则: - 当前线程在使用`volatile`变量前,必须从主内存中刷新最新值,确保其他线程的修改可见。 - 修改`volatile`变量后,必须立即同步回主内存,使得其他线程...
本文将深度解析`volatile`的内存语义实现及应用场景,并基于Java内存模型(JMM)进行分析。 首先,`volatile`关键字的主要作用是确保多线程环境下的数据一致性。当一个变量被声明为`volatile`时,它的修改对于所有...
Java内存模型及Volatile底层实现原理
### 三问JMM——有关JVM内存模型的深度解析 #### 前言 近期,在诚信通开源研究小组的专题学习分享会上,我们针对Java内存模型(JMM)进行了深入探讨,现将JMM相关的一些核心概念进行梳理,以便更好地理解和把握JMM的...
JVM会在适当的地方插入内存屏障来保证JMM的正确性,如volatile写操作前的store屏障和volatile读操作后的load屏障。 6. **重排序** - 编译器和处理器为了优化性能,可能会对指令进行重排序。但在JMM中,有特定的...
Java内存模型详解JMM Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)中的一种内存模型,它描述了程序中各个变量之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节...
深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发...
主要介绍了通过实例解析JMM和Volatile底层原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
但在旧的JMM中,volatile的语义并不够强大,无法完全避免由于处理器缓存和指令重排序导致的问题。这使得依赖volatile进行线程间通信的代码可能在某些情况下无法正常工作。 final关键字在Java中用来声明不可变对象,...
【JMM(Java Memory Model,Java 内存模型)】是Java平台中用于规范线程间通信和数据同步的一种模型。它定义了线程如何共享和访问内存,以及在并发环境下如何保证数据一致性。JMM规定了 volatile 变量、synchronized...
在并发编程领域,Volatile是Java中一个非常关键的特性,它为共享变量提供了内存可见性和有序性保证,但不保证原子性。本篇文章将深入分析Volatile的实现原理,结合`LinkedTransferQueue`和`TransferQueue`这两个与...
"04 并发编程专题04.zip"这个压缩包文件包含了两个关于Java内存模型(JMM)和volatile关键字的深入讲解部分,分别是"JMM&volatile详解(上)(1).vep"和"JMM&volatile详解(上)(2).vep"。在这里,我们将详细探讨...
1. ** volatile关键字**:volatile变量在JMM中有特殊的语义,它可以确保对volatile变量的修改对其他线程是立即可见的,避免了线程工作内存与主内存数据不一致的情况。在案例中,如果包子的状态(是否有包子)使用...
JSR-133规范增强了volatile的内存语义,确保了volatile变量的有序性和可见性,这使得volatile在多线程程序中被广泛使用。 综上所述,Java内存模型是一个复杂的系统,它涉及了线程间的通信与同步、共享变量的访问...
Java内存模型(JMM,Java Memory Model)是Java平台中用于定义线程间共享变量的访问规则的一个抽象概念,它规定了线程如何与主内存交互,以及对共享变量的操作顺序。在Java并发编程中,理解JMM至关重要,因为它直接...
首先,我们要理解JMM的核心概念——线程局部存储和主内存。每个线程都有自己的工作内存,其中包含了该线程对共享变量的副本。主内存则是所有线程共享的区域,存储了所有线程的原始变量值。线程通过读取和写入主内存...