这个模型可以告诉我们哪些场景不会存在可见性问题,它其中包含很多规则比如:
规则一
程序顺序性规则(as-if-serial):无论程序如何重排序,单线程环境下执行结果不会发生变化
规则二
传递性规则:A happens before B B happens before C 那么A happens before C成立
规则三
volatile变量规则:当第一个操作是普通读/写时,第二个操作只有是volatile写不会出现可见性问题。当第一个操作是volatile读时,第二个操作普通读/写,volatile读,volatile写都不会出现可见性问题,第一个操作是volatile写时,第二个操作是volatile读或volatile写不会出现可见性问题
规则四
监视器锁规则:如果线程1获得了锁,并且执行完成释放了锁,那么线程2在获取锁之后,它读取到的数据,一定是线程1更改之后的
规则五
start规则:线程1调用start之前的指令操作一定会happens before线程1start之后的操作
规则六
join规则