Java 并发核心:为什么需要 happens-before ? 很多人在学习 Java 并发的时候,会直接开始背诵知识点: volatile 保证可见性 synchronized 保证线程安全 Lock 可以手动加锁 happens-before 存在八条规则 但绝大多数人都没有弄懂底层根源问题: 为什么会诞生 happens-before 这套机制? 为什么恰好是这八条规则,而非十条、二十条? happens-before 从本质上解决了计算机并发中的什么痛点? 本文站在设计者视角,逐层拆解 Java 内存模型( JMM )中 happens-before 的设计初衷与底层原理。 一、无性能优化的理想环境:根本不需要 happens-before 假设计算机运行环境满足以下理想化条件: CPU 严格依照代码书写顺序串行执行指令 不存在 CPU 多级缓存 编译器不会做任何代码优化 全程没有指令重排行为 所有线程直接读写同一份主内存数据 此时多线程交互逻辑十分简单: 线程...