简述 happens - before 八大规则

"Happens-Before" 是Java内存模型中的概念,用于描述多线程程序中操作之间的顺序和可见性关系。它定义了一组规则,哪些操作具有可预测的行为。以下是"Happens-Before" 的八大规则:

  1. 程序顺序规则(Program Order Rule) :

    在一个线程中,程序按照代码的顺序执行,这意味着一个线程中的操作会按照它们在源代码中的顺序执行。

  2. 锁定规则(Monitor Lock Rule) :

    释放锁的操作(例如,通过synchronized块或Lock接口)在获取同一个锁之前的所有操作都发生在获取锁之后的操作之前。

  3. volatile变量规则(Volatile Variable Rule) :

    对一个volatile变量的写操作会在后续对该变量的读操作之前发生。这确保了对volatile变量的写入对于其他线程来说是可见的。

  4. 线程启动规则(Thread Start Rule) :

    线程的start()方法在新线程开始执行之前,必须完成之前线程的所有操作。

  5. 线程终止规则(Thread Termination Rule) :

    线程的所有操作必须在该线程终止之前完成。这包括线程中的任何join()方法的调用。

  6. 线程中断规则(Thread Interruption Rule) :

    对线程的中断操作(interrupt()方法)必须在后续对线程的中断检查(例如,调用isInterrupted()方法)之前发生。

  7. 对象终结规则(Finalizer Rule) :

    一个对象的finalize()方法的调用发生在任何后续对该对象的操作之前。

  8. 传递性规则(Transitivity Rule) :

    如果操作A发生在操作B之前,而操作B发生在操作C之前,那么操作A发生在操作C之前。这意味着"Happens-Before"关系具有传递性。

虽然"Happens-Before"关系定义了操作之间的顺序关系,但它不一定意味着操作的实际执行顺序。Java虚拟机和处理器可以根据性能和优化的需要重新排序指令,但必须确保不会违反"Happens-Before"规则。无需考虑底层硬件和虚拟机的细节。

相关推荐
范同学~4 小时前
项目添加水印
java·前端·javascript
快乐的韭菜根根4 小时前
Slurm 指定 GPU 卡:`File=/dev/nvidiaX` 映射的坑与修复
java·服务器·网络
酣大智5 小时前
hibernate学习笔记
java·hibernate·session
careathers5 小时前
【数据结构】基于比较的排序算法 - 插入排序
java·数据结构·排序算法
街头便衣6 小时前
OpenRouter周榜复算:164万亿token,输出2.55%,DeepSeek账单占1.4%
android·java·开发语言·人工智能·语言模型·开源
mister_guo6 小时前
Spring Boot 配置文件读取的几种方式:用法、原理与常见误区
java·spring boot
余槐i6 小时前
虚拟线程上线后吞吐反而掉了:Spring Boot 3 里 synchronized 锁住载体线程的定位与修复
java·spring boot·性能优化·虚拟线程·jdk 21
要开心吖ZSH6 小时前
DDD(领域驱动设计)篇三:实战对照——同一个订单业务,两种架构怎么写
java·架构·领域模型·ddd·领域驱动设计·设计思想
wangchunyu11416 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck16 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法