顺序一致性内存模型是一个被计算机科学家理想化了的理论参考模型,它为程序员提供了极强的内存可见性保证。顺序一致性内存模型有两大特性。
1)一个线程中的所有操作必须按照程序的顺序来执行。
2)(不管程序是否同步)所有线程都只能看到一个单一的操作执行顺序。在顺序一致性内存模型中,每个操作都必须原子执行且立刻对所有线程可见。

假设这两个线程使用监视器锁来正确同步:A线程的3个操作执行后释放监视器锁,随后B线程获取同一个监视器锁。

在顺序一致性模型中的执行顺序:

假设这两个线程没有做同步:

  JMM中,未同步的程序不但整体执行顺序无序,而且所有线程看到的执行顺序也可能不同。比如对一个普通变量的写操作,在当前线程未把本地缓存数据刷新到主内存当中之前,仅对当前线程可见,其他线程不可见。在这种情况下,当前线程和其他线程看到
的操作执行顺序将不一致。下面举简例对比:class SynchronizedExample {

int a = 0;
boolean flag = false;
public synchronized void writer() { // 获取锁
a = 1;
flag = true;
} // 释放锁
public synchronized void reader() { // 获取锁
if (flag) {
int i = a;
……
} // 释放锁
}
}执行顺序:

JMM在整体执行顺序上遵循顺序一致性模型(按临界区划分),在临界区内允许重排序。

差异对比:

1)顺序一致性模型保证单线程内的操作会按程序的顺序执行,而JMM不保证单线程内的
操作会按程序的顺序执行(比如上面正确同步的多线程程序在临界区内的重排序)。
2)顺序一致性模型保证所有线程只能看到一致的操作执行顺序,而JMM不保证所有线程
能看到一致的操作执行顺序。
3)JMM不保证对64位的long型和double型变量的写操作具有原子性,而顺序一致性模型保
证对所有的内存读/写操作都具有原子性。

 

转载于:https://www.cnblogs.com/AmbitiousMice/p/8378209.html

顺序一致性内存模型与JMM的“顺序一致性”相关推荐

  1. Java内存模型深度解析:顺序一致性--转

    原文地址:http://www.codeceo.com/article/java-memory-3.html 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据 ...

  2. Java内存模型深度解析:顺序一致性

    码农网:http://www.codeceo.com/article/java-memory-3.html 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据竞 ...

  3. 高并发编程-重新认识Java内存模型(JMM)

    文章目录 从CPU到内存模型 内存模型如何确保缓存一致性 并发变成需要解决的问题 (原子性.可见性.有序性) 内存模型需要解决的问题 Java内存模型 JMM的API实现 原子性 synchroniz ...

  4. 高并发编程-通过volatile重新认识CPU缓存 和 Java内存模型(JMM)

    文章目录 概述 volatile定义 CPU缓存 相关CPU术语 CPU缓存一致性协议MESI 带有高速缓存的CPU执行计算的流程 CPU 多级的缓存结构 Java 内存模型 (JMM) 线程通信的两 ...

  5. Java内存区域(运行时数据区域)和内存模型(JMM)

    原文作者:czwbig 原文:https://www.cnblogs.com/czwbig/p/11127124.html Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数 ...

  6. JVM成神之路-Java内存模型(JMM)

    Java 内存模型基础 什么是 Java 内存模型(JMM-共享内存模型) 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量 ...

  7. Java内存模型(JMM)

    Java 内存模型基础 什么是 Java 内存模型(JMM-共享内存模型) 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量 ...

  8. JVM_06 内存模型(JMM)篇

    Java内存模型(JMM) JMM即为 Java Memory Model ,他定义了主存(多个线程所共享的空间.例:成员变量).工作内存(线程的私有空间,例:局部变量)的抽象概念,对应着底层的CPU ...

  9. 详说Java内存模型(JMM)

    文章目录 什么是Java内存模型 为什么提出内存模型 Java主内存与工作内存 JMM三大特性 可见性 有序性 原子性 并发总结 什么是Java内存模型 Java内存模型就是(Java Memory ...

最新文章

  1. linux查看地址和,UNIX/LINUX平台下查看MAC和WWN地址的方法
  2. 让该死的恶意软件去死吧!!!!!!!
  3. SQL Server 2008 R2 开启数据库远程连接
  4. AccountManagment
  5. JavaScript中的数组
  6. linux系统shell知识点,Linux 系统中shell知识点说明和常用的帮助命令简单介绍 | IT工程师的生活足迹...
  7. 还不起9亿?有人建议为范冰冰发行一款私募ABS产品融资!
  8. [Ext JS 4] 实战之Chart 坐标控制(单坐标,双坐标)
  9. theano 编程细节
  10. python画五角星_Python第25课:海龟绘图_自定义函数的应用
  11. 推荐一本书(Secure Coding Standard for Java)
  12. python--getitme\setitem 支持索引与分片
  13. GIGABYTE技嘉主板内存手动超频教程
  14. FPGA之旅设计99例之第十九例----OV5640上电及初始化
  15. 【Java实现】南京地铁导航系统的简单实现(二)—— 最短路径算法的实现
  16. 网络学习-6.VLAN
  17. 【react-hook】 useCallback
  18. 运用NaviCat进行MongoDB查询管道操作索引等操作
  19. mockjs详细介绍
  20. 苹果里面有个设置,怎么让siri知道我是Ta的主人

热门文章

  1. Go语言基础练习题系列2
  2. Docker从入门到精通 项目实例示范
  3. HashSet、LinkedHashSet、TreeSet 简明解释
  4. JVM笔记(一)数字在JVM中的表示
  5. Referenced file contains errors (http://JAVA.sun.com/xml/ns/j2ee/web-app_2_5.xsd).
  6. C语言-05内存剖析
  7. MTK A/B system说明及配置
  8. HDFS节点内数据平衡
  9. php study是什么,phpstudy有什么用
  10. linux中流设备_Linux中的标准文件I/O流