【深入理解Java原理】Java 内存模型中的 happen-before 是什么?

Java 内存模型中的 happen-before 是什么?

Happen-before 关系,是Java 内存模型中保证多线程可见性的机制,也是早期语言规范中含糊可见性概念的一个精确定义。

它的具体表现形式,包括但远不止 synchronized,volatile,lock 操作顺序等方面。

happen-before 原则

  • 程序顺序规则:一个线程内执行的每个操作,都保证 happen-before 后面的操作,这样就保证了程序顺序规则,
  • volatile 变量规则:对于 volatile 变量,对他的写操作,保证 happen-before 在随后对改变量的读取操作。
  • 监视器锁规则:对于一个锁的解锁操作,保证 happen-before 加锁操作。
  • 线程启动 happen-before 规则:Thread 对象的 start() 方法先行于此线程的每一个动作
  • 线程中断 happen-before 规则:对线程 interrupt() 方法的调用先行发生于被中断线程的代码检测到中断事件的发生。
  • 线程终结规则:假定线程A在执行的过程中,通过制定ThreadB.join()等待线程B终止,那么线程B在终止之前对共享变量的修改在线程A等待返回后可见。
  • 对象终结规则,一个对象的初始化完成happen-before 于 finalizer() 方法的开始
  • 传递性:happen-before 存在传递性,a happen-before b ,b happen-before c ,那么 a happen-before c 。

happen-before 保障了顺序执行,也包括了内存读写的操作顺序。

happen-before 与 JMM 的关系

html>

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值