happens-before
关系是一组规则,用来描述程序中操作的执行顺序,保证程序的正确性和一致性。它定义了哪些操作必须在哪些操作之前执行,从而避免了数据竞争和不一致性问题。
happens-before 关系主要有以下几种:
- 程序顺序规则: 在一个线程内,按照程序代码的顺序,前面的操作 happens-before 后面的操作。
- 监视器锁规则: 一个unlock 操作 happens-before 随后对同一个锁的 lock 操作。 volatile 变量规则: 对一个volatile 变量的写操作 happens-before 随后对该变量的读操作。
- 线程启动规则: Thread 对象的start() 方法 happens-before 该线程中的任何操作。
- 线程终止规则: 线程中的任何操作 happens-before该线程的终止检测,例如 join() 方法的返回。 线程中断规则: 对线程的 interrupt() 方法的调用
- happens-before 被中断线程代码检测到中断事件。 对象终结规则: 一个对象的初始化完成 happens-before 该对象的 finalize() 方法的开始。
- 传递性: 如果 A happens-before B,且 B happens-before C,则 A happens-before C。
举例说明:
程序顺序规则: 在同一个线程中,代码 x = 1; y = 2; 中的 x = 1 操作 happens-before y = 2 操作。
监视器锁规则: 一个线程获取了锁,执行了一些操作,然后释放了锁,另一个线程获取了同一个锁,那么释放锁的操作 happens-before
获取锁的操作。
标签:happens,关系,volatile,线程,规则,操作,before From: https://blog.csdn.net/weixin_43993064/article/details/139671211volatile 变量规则: 一个线程将一个 volatile 变量的值修改为 1,另一个线程读取该变量的值,那么写操作
happens-before 读操作。