happens-before的法则

                                       happens-before的法则

   当一个变量被多个线程读取,且至少被一个xian线程写入式,如果duxi读写操作并未依照happens-before排序,就会产生数据竞争
happens-before的法则包括:
 

程序次序法则:线程中的每个动作A都happends-before于该线程中的每一个动作B,其中,在程序中,所有的动作B都出现在动作A之后。
监视器锁法则:对一个监视器锁的解锁happens-before于每一个后续对同一个监视器锁的加锁。
volatile变量法则:对volatile域的写入操作happends-before于每一个后续对同一域的读操作。
线程启动法则:在一个线程里,对Thread.start的调用会happends-before于每一个启动线程中的动作。
线程终结法则:线程中的任何动作都happends-before于其他线程检测到这个线程已经终结,或者从Thread.join 调用中成功返回,或者Thread.isAlive返回false.
中断法则:一个线程调用另一个线程的interrupt.happens-before于被中断的线程发现中断。(通过跑出interruptedException,或者调用isInterrupted和interrupted).
终结法则:一个对象的构造函数的结束happends-before于这个对象finalizer的开始。
传递性:如果A happens-before于B, 且B happends-before 于C, 则A happens-before 于C。

猜你喜欢

转载自blog.csdn.net/xiao__jia__jia/article/details/81669352