“Happens-Before” 是Java内存模型中的概念,用于描述多线程程序中操作之间的顺序和可见性关系。它定义了一组规则,哪些操作具有可预测的行为。以下是"Happens-Before" 的八大规则:
程序顺序规则(Program Order Rule):
在一个线程中,程序按照代码的顺序执行,这意味着一个线程中的操作会按照它们在源代码中的顺序执行。
锁定规则(Monitor Lock Rule):
释放锁的操作(例如,通过synchronized
块或Lock
接口)在获取同一个锁之前的所有操作都发生在获取锁之后的操作之前。
volatile变量规则(Volatile Variable Rule):
对一个volatile
变量的写操作会在后续对该变量的读操作之前发生。这确保了对volatile
变量的写入对于其他线程来说是可见的。
线程启动规则(Thread Start Rule):
线程的start()
方法在新线程开始执行之前,必须完成之前线程的所有操作。
线程终止规则(Thread Termination Rule):
线程的所有操作必须在该线程终止之前完成。这包括线程中的任何join()
方法的调用。
线程中断规则