先行发生原则(Happens-Before)是判断数据是否存在竞争、线程是否安全的主要依据。先行发生是Java内存,模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,那么操作A产生的影响能够被操作B观察到。

口诀:如果两个操作之间具有happen-before关系,那么前一个操作的结果就会对后面的一个操作可见。是Java内存模型中定义的两个操作之间的偏序关系。

常见的happen-before规则:
1.程序顺序规则:一个线程中的每个操作,happen-before在该线程中的任意后续操作。(注解:如果只有一个线程的操作,那么前一个操作的结果肯定会对后续的操作可见。)2.锁规则:对一个锁的解锁,happen-before在随后对这个锁的加锁。(注解:这个最常见的就是synchronized方法和syncronized块)
3.volatile变量规则:对一个volatile域的写,happen-before在任意后续对这个volatile域的读。该规则在CurrentHashMap的读操作中不需要加锁有很好的体现。
4.传递性:如果A happen-before B,且B happen-before C,那么A happen - before C.
5.线程启动规则:Thread对象的start()方法happen-before此线程的每一个动作。
6.线程终止规则:线程的所有操作都happen-before对此线程的终止检测,可以通过Thread.join()方法结束,Thread.isAlive()的返回值等手段检测到线程已经终止执行。
7.线程中断规则:对线程interrupt()方法的调用happen-before发生于被中断线程的代码检测到中断时事件的发生。

总结:一个操作“时间上的先发生”不代表这个操作先行发生;一个操作先行发生也不代表这个操作在时间上是先发生的(指令的出现)。时间上的先后顺序对先行发生没有太大的关系,所以衡量并发安全问题的时候不要受到时间顺序的影响,一切以先行发生原则为准。

happen before相关推荐

  1. James Fee’s 5 Predictions Geo for 2010 and 5 Things That Won’t Happen

    Here are 5 predictions for Twenty Ten. The shapefile dies: SpatiaLite + ESRI's File Geodatabase API ...

  2. 干货 | 诚迈科技联合联发科技、Linaro推出《Make it happen!联发科技曦力X20开发板技术公开课(上海站)》精彩回顾

    2016年12月10日,由AlphaSTAR极客社区主办的<Make it happen!联发科技曦力X20开发板技术公开课>在上海完美落幕.联发科技.Linaro及诚迈科技热力助阵,电子 ...

  3. React中遇到的Bug——Unhandled Rejection (Error): Maximum update depth exceeded. This can happen when a com

    Error: Maximum update depth exceeded. This can happen when a component repeatedly calls setState ins ...

  4. Functions are not valid as a React child. This may happen if you return a Component instead of 「Comp

    控制台报错 Functions are not valid as a React child. This may happen if you return a Component instead of ...

  5. English trip V1 - 6.Accidents Happen! 发生意外! Teacher:Corrine Key: 过去进行时 was or were + Ving...

    In this lesson you will learn to talk about past occurences. 过去进行时 课上内容(Lesson) C: Hi, Loki! L: Hi, ...

  6. this can happen if layout contains custom windows and there are comple errers in the project解决方案

    this can happen if layout contains custom windows and there are comple errers in the project 解决方案: 1 ...

  7. Functions are not valid as a React child. This may happen if you return a Component instead of

    报错信息:Functions are not valid as a React child. This may happen if you return a Component instead of ...

  8. 【happen before】

    jvm内置的,保证先后逻辑关系的保障. jvm在设计的时候,将提前可知的先后逻辑关系的程序,内置jvm中. 例子: new 对象;对象清理:我们不可能写个if语句去判断是否对象创建完了没有.

  9. Dissecting BERT Part 1: The Encoder 解析BERT解码器(transformer)

    原文:https://medium.com/dissecting-bert/dissecting-bert-part-1-d3c3d495cdb3 A meaningful representatio ...

  10. BERT大火却不懂Transformer?读这一篇就够了 原版 可视化机器学习 可视化神经网络 可视化深度学习...20201107

    20211016 调节因子 20211004 [NLP]Transformer模型原理详解 - 知乎 论文所用 20210703 GPT模型与Transformer进行对比_znevegiveup1的 ...

最新文章

  1. AutoConfig工具使用
  2. 1000+ 常用 Python 库一览
  3. DPDK有关变量(二)
  4. R12.1.3 R12.2.X 注册客户化应用
  5. eclipse中java获取js的值_javascript – 如何在Eclipse中使用Selenium将外部.js导入我的Java测试?...
  6. 项目经理原则(转载)
  7. lisp pl线线段数_vlisp每日源码(标注多段线线长)
  8. md5后得到的32位字符串存储到mysql中太占空间了_好看!快收藏:非常完整的 MySQL 规范...
  9. 【软考-软件设计师】计算机安全
  10. 使用PORT对HOSTNAME执行DICOM Q / R操作的测试程序
  11. 线程方法destroy()和stop(Throwable)在JDK 11中删除
  12. SQL Server和Oracle数据库索引介绍
  13. 拷贝相同属性的两个对象的属性-BeanUtils和PropertyUtils以及区别
  14. Navicat安装教程(超详细)
  15. 夜深人静, 看看编程人生
  16. 简单人物画像_10天学会画画 第5天:简单人物画法
  17. Nav2极简笔记03-启动文件launch
  18. MTK 6737 Flash配置
  19. iPhone 重大缺陷 存储空间耗尽后无法正常开机
  20. NLP自然语言处理CRF详解

热门文章

  1. matlab拟合度R方,...1),问题是什么是拟合优度?、R^2大于多少说明拟合度很好,R^2在...-拟合度-数学-冀群是同学...
  2. 深度神经网络识别垃圾邮件
  3. 网络公益信息特征和用户行为规律研究以微博为例
  4. PyPI 官方仓库遭遇挖矿恶意组件投毒
  5. MatalbSimulink Control Tutorials笔记4-根轨迹设计控制器
  6. HM16.7量化部分学习记录
  7. PC系统启动过程简介以及Windows引导修复
  8. Kunbernetes从私有仓库nexus拉取镜像
  9. python del用法_python中del函数的用法详解
  10. web_0207_1