happen-before讲解
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讲解相关推荐
- 庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)
live555MediaServer.cpp服务端源码讲解(testRelay.cpp,http://blog.csdn.net/smilestone_322/article/details/1892 ...
- Linux文件锁内核VFS层源码实现讲解
此文档主要介绍Linux内核FL_FLOCK和FL_POSIX两种类型的文件锁在VFS层的实现.对强制性锁和租约锁**(lease**)不做过多的讨论.基于的内核版本为3.10.0-862.el7.x ...
- Lora1278驱动V4.4.2讲解一:驱动移植
注意,Lora1278驱动sx12xxDrivers-V2.1.0,原厂已经不更新和维护了,反馈的任何软件问题, 原厂就是一句话升级新的驱动,新驱动下载地址:https://github.com/Lo ...
- 人邮计算机第三版PPTu12,高一英语U12词句、词组讲解.ppt
<高一英语U12词句.词组讲解.ppt>由会员分享,可在线阅读,更多相关<高一英语U12词句.词组讲解.ppt(18页珍藏版)>请在装配图网上搜索. 1.Unit 12 Art ...
- 从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解
总结一下 O/S 课程里面和锁相关的内容. 本文是 6.S081 课程的相关内容总结回顾结合 Real World 的 Linux 讲解各种锁和 RCU lock free 机制原理, 前置知识是基本 ...
- 六级核心词汇讲解 (1~30)
list 001 1~30 1.abnormal/æb'nɔ:mə/ adj.不正常的:变态的 [派生词] normal adj.正常的 norm n. 准则 normal university 师范 ...
- Java代码设计模式讲解二十三种设计模式
设计模式 文章目录 设计模式 一.创造型设计模式 1.1 单例模式 1.1.1 饿汉式单例模式 1.1.2 懒汉式单例模式 (1)线程不安全的情况 (2)线程安全的情况 1. 实例化的方法上加sync ...
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- 详细通俗重点CRF层讲解
本文翻译自GitHub博客上的原创文章,结尾有原文链接.文章没有晦涩的数学公式,而是通过实例一步一步讲解CRF的实现过程,是入门CRF非常非常合适的资料. 相关项目代码: BERT-BiLSMT-CR ...
- 高级数据结构讲解与案例分析
然而,仅仅掌握好它们不足以应付大厂的算法面试的.为了达到对时间和空间复杂度的理想要求,本节课探究高级数据结构,它们的实现要比那些常用的数据结构要复杂得多.其中重点介绍: 优先队列 图 前缀树 线段树 ...
最新文章
- Corrupt JPEG data: 2 extraneous bytes before marker 0x
- comsol积分函数_怎样在COMSOL中实现时间和空间积分
- java 字符串缓冲池 String缓冲池
- sqllite开发安卓项目_【兼职项目】预算3万开发无线温度电流传感,2万开发直流电机打磨机控制...
- XCode5.1.1怎样实现代码块自己主动排版
- 常见数据类型的手机二维码生成与识别格式参考
- 一个三年Java程序员的面试总结!
- eclipse 设置和快捷键
- matlab在机电一体化的仿真图,基于simulink的机电一体化系统案例仿真教学研究
- 智慧城市发展参差不齐 亟待分级分类破“短板”
- css中“~”(波浪号)、“,”(逗号)、 “ + ”(加号)和 “ ”(大于号)是什么意思?
- 电脑重装系统后播放视频卡顿怎么办
- 【CSS基础】box-shadow盒子阴影(重点)
- TabLayout+ViewPager实现tab切换
- 第1139期AI100_机器学习日报(2017-10-31)
- 鸿蒙宴中座次理解错的是,鸿门宴的座位安排用意是什么
- regexp_substr
- html和css的基本入门
- ARP协议与ARP欺骗
- 西邮linux兴趣小组网络,西邮Linux兴趣小组纳新笔试试题