happens-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 读操作。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值