Java 内存模型中的 happen-before 是什么?
Happen-before 关系,是Java 内存模型中保证多线程可见性的机制,也是早期语言规范中含糊可见性概念的一个精确定义。
它的具体表现形式,包括但远不止 synchronized,volatile,lock 操作顺序等方面。
happen-before 原则
- 程序顺序规则:一个线程内执行的每个操作,都保证 happen-before 后面的操作,这样就保证了程序顺序规则,
- volatile 变量规则:对于 volatile 变量,对他的写操作,保证 happen-before 在随后对改变量的读取操作。
- 监视器锁规则:对于一个锁的解锁操作,保证 happen-before 加锁操作。
- 线程启动 happen-before 规则:Thread 对象的 start() 方法先行于此线程的每一个动作
- 线程中断 happen-before 规则:对线程 interrupt() 方法的调用先行发生于被中断线程的代码检测到中断事件的发生。
- 线程终结规则:假定线程A在执行的过程中,通过制定ThreadB.join()等待线程B终止,那么线程B在终止之前对共享变量的修改在线程A等待返回后可见。
- 对象终结规则,一个对象的初始化完成happen-before 于 finalizer() 方法的开始
- 传递性:happen-before 存在传递性,a happen-before b ,b happen-before c ,那么 a happen-before c 。
happen-before 保