什么是 Java 的 happens-before 规则?
什么是 Java 的 happens-before 规则?
回答重点
happens-before 规则是 Java 内存模型 (Java Memory Model, JMM) 中的核心概念,用于定义多线程程序中操作的可见性和顺序性。它通过指定一系列操作之间的顺序关系,确保线程间的操作是有序的,避免由于重排序或线程间数据不可见导致的并发问题。
happens-before 规则的主要规则:
1)程序次序规则:在一个线程中,代码的执行顺序是按照程序中的书写顺序执行的,即一个线程内,前面的操作 happens-before 后面的操作。
2)监视器锁规则:一个锁的解锁(unlock)操作 happens-before 后续对这个锁的加锁(lock)操作。也就是说,在释放锁之前的所有修改在加锁后对其他线程可见。
3)volatile 变量规则:对一个 volatile 变量的写操作 happens-before 后续对这个 volatile 变量的读操作。它保证 volatile 变量的可见性,确保一个线程修改 volatile 变量后,其他线程能立即看到最新值。
4) 线程启动规则:线程 A 执行 Thread.start() 操作后,线程 B 中的所有操作 happens-before 线程 A 的 Thread.start() 调用。
5)线程终止规则:线程 A 执行 Thread.join() 操作后,线程 B 中的所有操作 happens-before 线程 A 从 Thread.join() 返回。
6)线程中断规则:对线程的 interrupt() 调用 happens-before 线程检测到中断事件(通过 Thread.interrupted() 或 Thread.isInterrupted())。
7)对象的构造规则:对象的构造完成(即构造函数执行完毕) happens-before 该对象的 finalize() 方法调用。