为什么80%的码农都做不了架构师?>>>   

活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议。在本系列文章的 第 1 部分,专栏作者 Brian Goetz 主要介绍最初的 JMM 中的几个严重缺陷,这些缺陷导致了一些难度高得惊人的概念语义,这些概念原来被认为很简单。这个月,他介绍在新 JMM 中 volatile 和 final 的语义是如何变化的,这些改变使它们的语义符合大多数开发人员的直觉。其中一些改变已经在 JDK 1.4 中出现了,另一些改变则要等到 JDK 1.5。请您在本文的讨论论坛上与作者及其他读者交流您的想法。

开始编写并发代码是一件困难的事情,语言不应当增加它的难度。虽然 Java 平台从一开始就包括了对线程的支持,包括一个计划为正确同步的程序提供“一次编写,到处运行”保证的、跨平台的内存模型,但是原来的内存模型有一些漏洞。虽然许多 Java 平台提供了比 JMM 所要求的更强的保证,但是 JMM 中的漏洞使得无法容易地编写可以在任何平台上运行的并发 Java 程序。所以在 2001 年 5 月,成立了以修复 Java 内存模型为目的的 JSR 133。 上个月,我讨论了其中一些漏洞,这个月,我们将讨论如何堵住它们。

修复后的可见性

理解 JMM 所需要的一个关键概念是 可见性(visibility)——如何知道当线程 A 执行 someVariable?=?3 时,其他线程是否可以看到线程 A 所写的值 3?有一些原因使其他线程不能立即看到 someVariable 的值 3:可能是因为编译器为了执行效率更高而重新排序了指令,也可能是 someVariable 缓存在寄存器中,或者它的值写到写处理器的缓存中、但是还没有刷新到主存中,或者在读处理器的缓存中有一个老的(或者无效的)值。内存模型决定什么时候一个线程可以可靠地“看到”由其他线程对变量的写入。特别是,内存模型定义了保证内存操作跨线程的可见性的 volatile 、 synchronized 和 final 的语义

转载于:https://my.oschina.net/digerl/blog/28908

Java 理论与实践: 修复 Java 内存模型,第 2 部分 (VOLATILE, FINA...相关推荐

  1. Java 理论与实践: 修复 Java 内存模型,第 1 部分

    为什么80%的码农都做不了架构师?>>>    什么是 Java 内存模型,最初它是怎样被破坏的? Brian Goetz ( brian@quiotix.com), 首席顾问, Q ...

  2. Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)

    简介: Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能.非阻塞算法属于并发算法,它们可以安全地派生它们的线程, ...

  3. Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)...

    简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...

  4. Java 理论与实践: 垃圾收集简史

    垃圾收集的好处是无可争辩的 ―― 可靠性提高.使内存管理与类接口设计分离,并使开发者减少了跟踪内存管理错误的时间.著名的悬空指针和内存泄漏问题在 Java 程序中再也不会发生了(Java 程序可能会出 ...

  5. Java 理论与实践: 处理 InterruptedException(转)

    很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException.您不能忽略这个异常,因为它是一个检查异常(check ...

  6. java 理论与实践,Java 理论与实践: 正确使用 Volatile 变量

    Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低) ...

  7. Java 理论与实践:您的小数点到哪里去了?(转载)

    Brian Goetz(brian@quiotix.com) 首席顾问,Quiotix Corp 2003 年 4 月 许多程序员在其整个开发生涯中都不曾使用定点或浮点数,可能的例外是,偶尔在计时测试 ...

  8. Java并发知识梳理(上):并发优缺点,线程状态转换,Java内存模型,Synchronized,Volatile,final,并发三特性,Lock与AQS,ReetrandLock

    努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事! 整个系列文章为Java并发专题,一是自己的兴趣,二是,这部分在实际理解上很有难度,另外在面试过程中也是经常被问到.所以在学习过程中,记 ...

  9. 深入理解Java内存模型(四)——volatile

    2019独角兽企业重金招聘Python工程师标准>>> volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好 ...

最新文章

  1. GitLab 在中国成立公司极狐,GitHub 还会远吗?
  2. ICCV2021 Oral SimROD:简单高效的数据增强!华为提出了一种简单的鲁棒目标检测自适应方法...
  3. python是脚本语言不需要编译器编译执行_都有Python了,还要什么编译器!
  4. 用美颜照当广告犯法!要么就标注“照骗”,挪威针对明星网红出手了
  5. 设计模式复习-中介者模式
  6. mysqL学习之实例
  7. windows7 来了
  8. 实现一个通用的生产者消费者队列(c语言版本)
  9. 图论 —— 网络流 —— 费用流 —— MCMF 算法
  10. java手机震动_Windows Phone 7 开发 之使手机震动
  11. Code Block 使用笔记(win7、updating)
  12. Python-在线文本情感分析实验
  13. 从mysql全备 导入指定数据库的数据:三种考虑方法
  14. 腾讯良心软件,被秒了
  15. IE10横空出世,一统江湖
  16. layui table切换html,解决Layui中切换tab时table样式错乱问题
  17. Audio:Android-TinyAlsa架构 Mixer API
  18. 微信公众号申请流程整理
  19. 实战技法 - 短线操盘 (2)
  20. xshell 免费版申请

热门文章

  1. 寒武纪宣布完成B轮融资 整体估值达25亿美元
  2. 重磅,Intel考虑收购博通
  3. 65% 的钱被头部玩家拿走,人工智能要进入下半场?
  4. 黑客解锁微信一键洗白、删好友、批量实名认证功能!38 名“海贼王”被判刑...
  5. 可怕!315 曝光 50 多款App“窃听”:这条黑色产业链,有人靠你的隐私年赚千万...
  6. 表表达式,Substring, CharIndex, 多行数据变同一行的用法
  7. 《Java工程师修炼之道》内容概览
  8. git提交代码遇到fatal: unable to access
  9. “雪花”项目:Microsoft探索在.NET中实现手工内存管理
  10. 绝对炫的3D幻灯片-SLICEBOX