首页 > 其他分享 >happens-before 关系

happens-before 关系

时间:2024-06-15 12:59:00浏览次数:29  
标签:happens 关系 volatile 线程 规则 操作 before

happens-before 关系是一组规则,用来描述程序中操作的执行顺序,保证程序的正确性和一致性。它定义了哪些操作必须在哪些操作之前执行,从而避免了数据竞争和不一致性问题。

happens-before 关系主要有以下几种:

  1. 程序顺序规则: 在一个线程内,按照程序代码的顺序,前面的操作 happens-before 后面的操作。
  2. 监视器锁规则: 一个unlock 操作 happens-before 随后对同一个锁的 lock 操作。 volatile 变量规则: 对一个volatile 变量的写操作 happens-before 随后对该变量的读操作。
  3. 线程启动规则: Thread 对象的start() 方法 happens-before 该线程中的任何操作。
  4. 线程终止规则: 线程中的任何操作 happens-before该线程的终止检测,例如 join() 方法的返回。 线程中断规则: 对线程的 interrupt() 方法的调用
  5. happens-before 被中断线程代码检测到中断事件。 对象终结规则: 一个对象的初始化完成 happens-before 该对象的 finalize() 方法的开始。
  6. 传递性: 如果 A happens-before B,且 B happens-before C,则 A happens-before C。

举例说明:

程序顺序规则: 在同一个线程中,代码 x = 1; y = 2; 中的 x = 1 操作 happens-before y = 2 操作。

监视器锁规则: 一个线程获取了锁,执行了一些操作,然后释放了锁,另一个线程获取了同一个锁,那么释放锁的操作 happens-before
获取锁的操作。

volatile 变量规则: 一个线程将一个 volatile 变量的值修改为 1,另一个线程读取该变量的值,那么写操作
happens-before 读操作。

标签:happens,关系,volatile,线程,规则,操作,before
From: https://blog.csdn.net/weixin_43993064/article/details/139671211

相关文章

  • MySQL周内训参照1、ER实体关系图与数据库模型图绘制
    题目要求详情地址:04-MySQL比赛内容与要求细则编号人员题目总分数题干提交内容得分标准1产品经理绘制ER图10使用工具统一版本viso2013要求创建的实体有:1、用户表(user)、用户钱包表(user_wallet)(与user是1对1关系)、用户钱包交易日志表(user_wallet_log)(与user是1对多关系)......
  • kubernetes-PV与PVC 的关系与绑定的条件
    PV:声明这个资源是一个持久卷(PV)。PVC:声明这个资源是一个持久卷声明(PVC)。创建yaml配置apiVersion:v1kind:PersistentVolume#PV是集群中的一块存储,可以由PVC请求并使用。-虚拟存储-实体机的存储、不是容器中的存储metadata:name:postgresql-pvnamespace:......
  • kubernetes-外部数据库服务映射至集群内-Service与Endpoints的关系
    创建yaml文件配置数据库信息kind:ServiceapiVersion:v1metadata:name:mysql-svcnamespace:ops-systemspec:type:ClusterIP #Kubernetes将为此服务随机分配一个集群内部的IP地址ClusterIP类型的服务只能在集群内部访问,提供了一个内部访问的固定IP地址,不对......
  • c++定义了类在main函数中使用的一个坑现象的解决,让我理解了栈,堆和内存之间关系。
    首先描述一下我的坑是啥?我的坑就是写了一个对集料颗粒进行角度计算的类,在main函数中使用采用了类定义申明,这样使用导致一个坑,这个类中对于集料的数目进行了宏定义,发现数据如果超过20个,编译就报错,当时没有太在意这个坑,没有思考什么原因。也就将就者用了。后来对接同事说,这个颗粒数......
  • kubernetes网络概念、关系
    kubernetes实现了对容器的编排,实际上就是对计算、网络、存储的编排。在网络部分,涉及到的概念或者模块有三个:kube-proxy:本质上讲就是Service资源的实现kube-proxypod运行在每个kubernetes节点中,通过iptables或者ipvs的方式实现service到pod-endpoint的负载均衡能力。ipvs......
  • java 与jdk 关系
      java与jdk的关系Java与JDK的关系是,Java是一种编程语言,而JDK(JavaDevelopmentKit)是Java语言的官方开发工具包。12JDK是整个Java技术的核心,它包括了JRE(JavaRuntimeEnvironment)和一系列Java开发工具(如javac、java、javadoc等)。JRE是Jav......
  • 组长:你熟悉过React,开发个Next项目模板吧,我:怎么扯上关系的?
    组长:你熟悉过React,开发个Next项目模板吧,我:怎么扯上关系的?最近工作安排我开发一个Next.js项目模板,心里默笑,React用得少得都快忘光了,现在得搞Next?虽然我曾是React的老用户,但转投Vue阵营已久,React的点点滴滴早已一干二净。不过,挑战归挑战,规矩还得照做。我们通常会用内部工具来搭......
  • 巧妙使用mapstruct来解决数据库entiy到实体dto的映射关系
    1.引入mapstruct<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-p......
  • 个字规则:轻松解决一大类初中数学三线段数量关系问题
    个字规则:轻松解决一大类初中数学三线段数量关系问题【题1】【题2】【题3】要点分析与方法提炼【题4】【题5】2024东城区二模【题6】2024朝阳区二模【题7】2024石景山区二模 ......
  • ER实体关系图与数据库模型图绘制
    属性分析1、用户表(user)、用户钱包表(user_wallet)(与user是1对1关系)、用户钱包交易日志表(user_wallet_log)(与user是1对多关系)。user:用户表通常包含用户的基本信息,例如用户ID(主键)、用户名、密码(通常加密存储)、邮箱、手机号、创建时间等。属性设计:user_id:用户ID(主键,......