深入理解 happens-before 原则

本文详细解析了Java内存模型中的happens-before原则,它简化了并发编程的理解。文章阐述了该原则的8条规则,并通过实例说明了即使操作在时间上先后发生,也不一定符合happens-before原则,强调了并发安全应依据此原则来判断。
摘要由CSDN通过智能技术生成

ca7e0e54ea327b02d967b0ab73c5062e.png

在前面的文章中(从 CPU 说起,深入理解 Java 内存模型!),我们深入了解了 Java 内存模型,知道了 Java 内存模型诞生的意义,以及其要解决的问题。最终我们知道:Java 内存模型就是定义了 8 个基本操作以及 8 个规则,只要遵守这些规则的并发操作,那么它们就是安全的。

即使强如树哥的人,看了这 16 条规则也很头疼。它们太过于繁琐了,非常不利于我们日常代码的编写。为了能帮助编程人员理解,于是就有了与其相等价的判断原则 —— 先行发生原则,它可以用于判断一个访问在并发环境下是否安全。

到这里,我们需要明白:happens-before 原则是对 Java 内存模型的简化,让我们更好地写出并发代码。就像 Java 语言等高级语言,之于汇编语言、机器语言等低级语言一样,可以让编程人员免受「皮肉之苦」。

今天就让我们来深入聊聊关于 happens-before 的那些事儿!

e7cc222816ef3655bfc3a1aefa1c582e.png

什么是 happens-before?

happens-before 指的是 Java 内存模型中两项操作的顺序关系。例如说操作 A 先于操作 B,也就是说操作 A 发生在操作 B 之前,操作 A 产生的影响能够被操作 B 观察到。这里的「影响」包括:内存中共享变量的值、发送了消息、调用了方法等。

举个很简单的例子:下面代码里 i=1 在线程 A 中执行,而 j=i 在线程 B 中执行。因为 i=1 操作先于 j=i 执行,那么 i&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值