happen-before

JMM可以通过happens-before关系向程序员提供跨线程的内存可见性保证(如果A线程的写操作a与B线程的读操作b之间存在happens-before关系,尽管a操作和b操作在不同的线程中执行,但JMM向程序员保证a操作将对b操作可见)。

具体的定义为:

  • 1)如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。

  • 2)两个操作之间存在happens-before关系,并不意味着Java平台的具体实现必须要按照happens-before关系指定的顺序来执行。如果重排序之后的执行结果,与按happens-before关系来执行的结果一致,那么这种重排序并不非法(也就是说,JMM允许这种重排序)。

Happen before的八大原则

  • 单线程happen-before原则:在同一个线程中,书写在前面的操作happen-before后面的操作。
  • 锁的happen-before原则:对一个锁的解锁,happens-before于随后对这个锁的加锁。
  • volatile的happen-before原则:对一个volatile变量的写操作happen-before对此变量的任意操作(当然也包括写操作了)。
  • happen-before的传递性原则:如果A操作 happen-before B操作,B操作happen-before C操作,那么A操作happen-before C操作。
  • 线程启动的happen-before原则:同一个线程的start方法happen-before此线程的其它方法。
  • 线程中断的happen-before原则:对线程interrupted()方法的调用先行于被中断线程的代码检测到中断时间的发生。
  • 线程join的happen-before原则:如果线程A执行操作ThreadB.join()并成功返回,那么线程B中的任意操作happens-before于线程A从ThreadB.join()操作成功返回。
  • 对象创建的happen-before原则:一个对象的初始化完成先于他的finalize方法调用。

happen-before讲解相关推荐

  1. 庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)

    live555MediaServer.cpp服务端源码讲解(testRelay.cpp,http://blog.csdn.net/smilestone_322/article/details/1892 ...

  2. Linux文件锁内核VFS层源码实现讲解

    此文档主要介绍Linux内核FL_FLOCK和FL_POSIX两种类型的文件锁在VFS层的实现.对强制性锁和租约锁**(lease**)不做过多的讨论.基于的内核版本为3.10.0-862.el7.x ...

  3. Lora1278驱动V4.4.2讲解一:驱动移植

    注意,Lora1278驱动sx12xxDrivers-V2.1.0,原厂已经不更新和维护了,反馈的任何软件问题, 原厂就是一句话升级新的驱动,新驱动下载地址:https://github.com/Lo ...

  4. 人邮计算机第三版PPTu12,高一英语U12词句、词组讲解.ppt

    <高一英语U12词句.词组讲解.ppt>由会员分享,可在线阅读,更多相关<高一英语U12词句.词组讲解.ppt(18页珍藏版)>请在装配图网上搜索. 1.Unit 12 Art ...

  5. 从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解

    总结一下 O/S 课程里面和锁相关的内容. 本文是 6.S081 课程的相关内容总结回顾结合 Real World 的 Linux 讲解各种锁和 RCU lock free 机制原理, 前置知识是基本 ...

  6. 六级核心词汇讲解 (1~30)

    list 001 1~30 1.abnormal/æb'nɔ:mə/ adj.不正常的:变态的 [派生词] normal adj.正常的 norm n. 准则 normal university 师范 ...

  7. Java代码设计模式讲解二十三种设计模式

    设计模式 文章目录 设计模式 一.创造型设计模式 1.1 单例模式 1.1.1 饿汉式单例模式 1.1.2 懒汉式单例模式 (1)线程不安全的情况 (2)线程安全的情况 1. 实例化的方法上加sync ...

  8. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  9. 详细通俗重点CRF层讲解

    本文翻译自GitHub博客上的原创文章,结尾有原文链接.文章没有晦涩的数学公式,而是通过实例一步一步讲解CRF的实现过程,是入门CRF非常非常合适的资料. 相关项目代码: BERT-BiLSMT-CR ...

  10. 高级数据结构讲解与案例分析

    然而,仅仅掌握好它们不足以应付大厂的算法面试的.为了达到对时间和空间复杂度的理想要求,本节课探究高级数据结构,它们的实现要比那些常用的数据结构要复杂得多.其中重点介绍: 优先队列 图 前缀树 线段树 ...

最新文章

  1. Corrupt JPEG data: 2 extraneous bytes before marker 0x
  2. comsol积分函数_怎样在COMSOL中实现时间和空间积分
  3. java 字符串缓冲池 String缓冲池
  4. sqllite开发安卓项目_【兼职项目】预算3万开发无线温度电流传感,2万开发直流电机打磨机控制...
  5. XCode5.1.1怎样实现代码块自己主动排版
  6. 常见数据类型的手机二维码生成与识别格式参考
  7. 一个三年Java程序员的面试总结!
  8. eclipse 设置和快捷键
  9. matlab在机电一体化的仿真图,基于simulink的机电一体化系统案例仿真教学研究
  10. 智慧城市发展参差不齐 亟待分级分类破“短板”
  11. css中“~”(波浪号)、“,”(逗号)、 “ + ”(加号)和 “ ”(大于号)是什么意思?
  12. 电脑重装系统后播放视频卡顿怎么办
  13. 【CSS基础】box-shadow盒子阴影(重点)
  14. TabLayout+ViewPager实现tab切换
  15. 第1139期AI100_机器学习日报(2017-10-31)
  16. 鸿蒙宴中座次理解错的是,鸿门宴的座位安排用意是什么
  17. regexp_substr
  18. html和css的基本入门
  19. ARP协议与ARP欺骗
  20. 西邮linux兴趣小组网络,西邮Linux兴趣小组纳新笔试试题

热门文章

  1. 关于selenium获取网页下一页的点击事件
  2. 性能优化之mysql优化_性能优化之MySQL优化
  3. 《英雄无敌3》的一个独立的扩展版-英雄无敌3死亡阴影下载
  4. MyBatis框架总结
  5. 反垃圾邮件技术介绍和部署思路
  6. 百度大脑人脸情绪实时识别攻略
  7. linux保险箱软件,手机加密App哪个好?手机加密软件推荐
  8. 树形DP·1771仓库选址
  9. 忘记保护密码情况下卸载瑞星杀毒软件
  10. 计算机的硬盘驱动器是一种,计算机中有两个硬盘驱动器,如何在另一个硬盘驱动器上安装系统?...