Java内存模型JMM
JMM三大特性:可见性、有序性、原子性
可见性
原子性:指一个操作是不可打断的,即多线程的环境下,操作不能被其他线程干扰
有序性
处理器在进行重排序时,必须要考虑指令之间的数据依赖性。多线程环境中线程交替进行,由于编译器优化重排的存在,两个线程中使用的变量能否保证一致性是无法确定的,结果无法预测。
JMM规范下,多线程对变量的读写过程
JMM规范下,多线程先行发生原则之happens-before
happens-before的总原则
如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。
两个操作之间存在happens-before关系,并不意味着一定按照happens-before原则制定的顺序来执行。如果重排序之后的执行结果与按照happens-before关系来执行的结果一致,那么这种重排序并不非法。
happens-before本质是一种可见性